IIS 10.0, 클래식 ASP는 MSXml2.ServerXmlHttp.6.0 개체를 만들 수 없습니다.

IIS 10.0, 클래식 ASP는 MSXml2.ServerXmlHttp.6.0 개체를 만들 수 없습니다.

x64 통합 풀에서 클래식 ASP 응용 프로그램을 실행하는 두 대의 Server 2016 컴퓨터가 있고공유 구성.

두 서버 모두 동일하게 설정되어 있다고 생각했지만하나의 서버다음에 오류가 발생합니다.

obj = Server.CreateObject("MSXml2.ServerXmlHttp.6.0") 설정

오류 번호 = 800401F3

내 신청서에만!

동일한 사이트에서 실행되는 별도의 ASP 페이지에 해당 줄을 넣으면 정상적으로 완료됩니다(Err.Number=0).

이벤트 로그 항목을 찾지 못했습니다.

내가 시도한 것:

  • 버전 유무(.6.0 부분)
  • 레지스트리 권한
  • msxml3.dll 및 msxml6.dll(System32 및 SysWOW64 모두)에 대한 파일 권한
  • 동일한 DLL 등록 취소/재등록

이 문제를 어디에서 볼 것인지/어떻게 문제를 해결할 것인지에 대한 제안을 받고 싶습니다.

답변1

동일한 사이트의 다른 페이지에서는 제대로 실행되지만 동일한 애플리케이션의 다른 페이지에서는 제대로 실행되지 않는 경우 애플리케이션 설정과 관련이 있어야 합니다. 빈 web.config로 시작하고 손상된 앱의 특정 설정을 추가하세요.

동일한 앱의 기본 페이지에서 제대로 실행된다면 페이지에 문제가 있는 것입니다.

구성 내부의 무엇이 이 문제를 일으킬지 확실하지 않지만 그것이 제가 시도할 것입니다.

답변2

이는 개체 생성의 문제가 아니라 Server.CreateObject()의 버그(또는 동작 변경)와 다른 COM DLL의 여러 버전을 처리하는 일부 코드로 인한 문제였습니다.

다음과 같이 가능한 여러 버전의 DLL을 처리하는 코드가 있습니다.

    obj = Server.CreateObject("Version1.Object")

    If Err.Number <> 0 Then
        obj = Server.CreateObject("Version2.Object")
    End If

결국 이들 중 하나가 성공했다고 가정하면 Err.Number = 0이 됩니다.

IIS 10.0(Server 2016)에서 성공적인 Server.CreateObject("Version2.Object")는 Server.CreateObject("Version2.Object")의 Err.Number에 이전 값을 남겼습니다.

새 코드:

obj = Server.CreateObject("Version1.Object")

If Err.Number <> 0 Then
    Err.Clear
    obj = Server.CreateObject("Version2.Object")
End If

관련 정보