ASP.NET AJAX 컨트롤 사용시 Sys is not defined 에러 처리

[문제의 원인]
Sys is not defined 라는 에러는 Sys 라는 글로벌 변수가 javascript 에서 정의가 되어 있지않아서 생긴문제다.
이문제가 왜 일어날까?..

[문제의 발단]
작년에 ASP.NET 2.0 AJAX 컨트롤 기반으로 웹개발후, 프레임웍과 개발툴을 업그레이드한후,
개발한 사이트를 돌렸을경우 AJAX 컨트롤에서 버젼 오류가 생겼다.
즉, AJAX Lib 1.0 과 AJAX Lib 3.0 어셈블리가 서로 버젼을 충돌을 일으켰다.

[원인 분석]
내가 이문제를 겪은 주원인은 .NET Framework 2.0 에서 3.0 으로 업그레이드하고,.. VS2008 beta 버젼을 다운로드해서 사용하다가. 정식 버젼인 Visual Studio 2008 Express  버젼이 나오면서 업그래이드 후에 나타난 문제다.

내가 여기서 실수한건 베타 버젼을 제대로 못지우고, 설치를 강행해서 그런거 같다. 즉, 레지스트리 파일을 열어서 강제로 설정 레지스트리를 지웠지만, 실제로 맴핑되어있던 Assembly와 DLL 파일을 지우지도 못했고, 그밖에 찌꺼기 레지를 지우지 못해서 설정이 꼬였던거 같다.

[해결책]
여튼,  해결한 방법은 간단했다.
기존에 백업해두었던.. Web.config 파일을 덮어 씌웠는데.. 바로 해결됐다..-ㅜ..
(젠장 3일이나 삽질했다..ㅜㅜ..)

.NET Framework 2.0 기반의 Ajax 1.0 컨트롤 설정은 아래와 같다.

업그레이드후 Web.config 파일을 기존 버젼과 비교해 보니 아래 빨간색 부분이 누락되어있었고…녹색부분의 색션부분의 Extensions 버전이 달랐다..

<?xml version=”1.0″?>
<configuration>
  <configSections>
    <sectionGroup name=”system.web.extensions” type=”System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″>
      <sectionGroup name=”scripting” type=”System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″>
        <section name=”scriptResourceHandler” type=”System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ requirePermission=”false” allowDefinition=”MachineToApplication”/>
        <sectionGroup name=”webServices” type=”System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″>
          <section name=”jsonSerialization” type=”System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ requirePermission=”false” allowDefinition=”Everywhere”/>
          <section name=”profileService” type=”System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ requirePermission=”false” allowDefinition=”MachineToApplication”/>
          <section name=”authenticationService” type=”System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ requirePermission=”false” allowDefinition=”MachineToApplication”/>
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
  </configSections>
  <connectionStrings>
    <add name=”RIKIConnectionString” connectionString=”Data Source=RIKI;Initial Catalog=RikiDB;Persist Security Info=True;User ID=*********;Password=*******” providerName=”System.Data.SqlClient”/>
  </connectionStrings>
  <system.web>
    <pages>
      <controls>
        <add tagPrefix=”asp” namespace=”System.Web.UI” assembly=”System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
        <add namespace=”AjaxControlToolkit” assembly=”AjaxControlToolkit” tagPrefix=”ajaxToolkit”/>
      </controls>
    </pages>
    <!–
          Set compilation debug=”true” to insert debugging
          symbols into the compiled page. Because this
          affects performance, set this value to true only
          during development.
    –>
    <compilation debug=”true”>
      <assemblies>
        <add assembly=”System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
        <add assembly=”System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″/>
        <add assembly=”System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A”/>
        <add assembly=”System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089″/>
      </assemblies>
    </compilation>
    <httpHandlers>
      <remove verb=”” path=”.asmx”/>
      <add verb=”” path=”.asmx” validate=”false” type=”System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
      <add verb=”” path=”_AppService.axd” validate=”false” type=”System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
      <add verb=”GET,HEAD” path=”ScriptResource.axd” type=”System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ validate=”false”/>
      <add verb=”GET” path=”FtbWebResource.axd” type=”FreeTextBoxControls.AssemblyResourceHandler, FreeTextBox”/>
    </httpHandlers>
    <httpModules>
      <add name=”ScriptModule” type=”System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
    </httpModules>
    <authentication mode=”Forms”>
      <forms name=”.AUTHCOOKIE” loginUrl=”login/login.aspx” protection=”All”/>
    </authentication>
    <authorization>
      <deny users=”?”/>
    </authorization>
  </system.web>
  <system.web.extensions>
    <scripting>
      <webServices>
        <!– Uncomment this line to customize maxJsonLength and add a custom converter –>
        <!–
      <jsonSerialization maxJsonLength=”500″>
        <converters>
          <add name=”ConvertMe” type=”Acme.SubAcme.ConvertMeTypeConverter”/>
        </converters>
      </jsonSerialization>
      –>
        <!– Uncomment this line to enable the authentication service. Include requireSSL=”true” if appropriate. –>
        <!–
        <authenticationService enabled=”true” requireSSL = “true|false”/>
      –>
        <!– Uncomment these lines to enable the profile service. To allow profile properties to be retrieved
           and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and
           writeAccessProperties attributes. –>
        <!–
      <profileService enabled=”true”
                      readAccessProperties=”propertyname1,propertyname2″
                      writeAccessProperties=”propertyname1,propertyname2″ />
      –>
      </webServices>
      <!–
      <scriptResourceHandler enableCompression=”true” enableCaching=”true” />
      –>
    </scripting>
  </system.web.extensions>
  <system.webServer>
    <validation validateIntegratedModeConfiguration=”false”/>
    <modules>
      <add name=”ScriptModule” preCondition=”integratedMode” type=”System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
    </modules>
    <handlers>
      <remove name=”WebServiceHandlerFactory-Integrated”/>
      <add name=”ScriptHandlerFactory” verb=”*” path=”*.asmx” preCondition=”integratedMode” type=”System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
      <add name=”ScriptHandlerFactoryAppServices” verb=”*” path=”*_AppService.axd” preCondition=”integratedMode” type=”System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
      <add name=”ScriptResource” preCondition=”integratedMode” verb=”GET,HEAD” path=”ScriptResource.axd” type=”System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>

    </handlers>
  </system.webServer>
</configuration>

JavaScript 크로스 도메인 문제..

크로스 도메인 문제로 검색을 타고 들어오는 분들이 많아..
제가 낚시글을 올린것 같아 따로 정리합니다.
아랫글은 너무 오래된 글이라서.. ㅇㅎㅎ
아래 링크에서 정리하도록 하죠..
——

지난 짬뽕나 프로젝트 기간동안 내내 문제를 일으켜온 크로스 도메인 문제…
일단 이 부분을 내가 맡은 파트가 아니라서 잠시 접어두고 있었는데…

오늘 찬찬히 소스 코드를 디벼보았다..

일단 자바스크립트에서 크로스 도메인 문제란,.. 보안과 직결된다..
자세한 내용은 크로스 도메인으로 검색해보면 나올것이고…

내가 오늘 해결한 방법부터 정리하면…
브라우저에 따라 2가지가 있겠다..

먼저 인터넷 익스플로러.. !! 크로스 도메인 문제를 체크하기전에 먼저 체크해야할게 있다..
바로 인터넷 옵션 – 보안 – 사용자 지정 수준 – 도메인 간의 데이타 소스 엑세스!!!
바로 요부분이다. 이게 IE 에서 디폴트로 사용안함으로 되어 있기때문에..

OpenAPI 로.. 특히 자바스크립트로 먼가를 할때.. 자꾸 접근제한 에러가 생긴다..
정확히 말하면,.. Ajax에선 XMLHttprequest 객체를 선언하고.. 이 객체의 Open() 메쏘드를 호출할때..
바로 이 접근 제한 문제가 발생한다..

은근히 해결책은 간단했다.. 오늘 정말 4시간동안.. 소스코드 분석하고.. GWT로 작성된거 ASP.NET 예제코드로 바꿔서 테스트해보고.. 쌩쑈를 한 기분이다. 그런데 결론은 ㅎㅎㅎ 삽질 삽질 삽질…. 하는 소리가 들리는군….

바로 IE 저 도메인 간 데이타 소스 엑세스를 사용안함에서 사용 이나 확인 으로 바꿔만 주면 되는것이었다..젠장..ㅜㅜ.. OTL ….난 왜, 또 삽질을 한것이더냐..ㅎㅎㅎ 삽질은 디버깅의 어머니라고 누가 말했떠냐.ㅎㅎㅎ

옵션에서 “사용함”보다는 “확인”을 권장한다.. 사용으로 해놓으면.. 브라우져로 서핑할때 마다 이상한 코드 저절로 다운받아서 실행하게 될찌 아무도 모르기 때문에… 확인으로 하는것을 적극 권장한다..
그럼 실제 OpenAPI로 호출했을때.. 접근권한 경고 메시지를 보게 될것이다..
가비~얍게… 확인 눌러주시고.. 다시해보면.. 잘 된다..ㅋㅋㅋ

반면 파이어폭스는 여러책을 참조한 결과.. 보안정책이 달라서..
보안메니져를 직접 호출해야한다고 하넹..-_-
요부분은 나중에 좀더 공부해서 정리해봐야겠땅..

오늘은 여까지.. 나랑 비슷한 문제를 가진사람들 제발 삽질을 안했으면 하는마음으로…작성했다..ㅎㅎ