問題
Msxml2.ServerXMLHTTPは401を返し続けます-Webサーバーからファイル(ASP)の内容を読み取ろうとするたびに、許可されていないエラーが発生します。
ソースサーバーは、NTLM統合ログインを使用してIIS6を実行しています。
このプロセスは以前は正常に使用されていましたが、内部Webサイトではなく外部WebサイトからXMLファイルを抽出する場合に限ります。
スクリプトが実行されるサーバーのレジストリのプロキシ設定も更新され、問題のWebサイトをバイパスしますが、役に立ちません。
VBScriptで識別されたすべてのパスがチェックおよびテストされており、正しいものです。
スクリプトを実行しているユーザーには、スクリプトで参照されているすべての場所に対する正しい読み取り/書き込み権限があります。
必要な解決策
スクリプトが意図したとおりに機能するように、HTTP401未承認メッセージの原因を特定します。
説明
私たちの組織はイントラネットを運営しており、コンテンツは各リモートサイトのサーバーに複製されます。これにより、接続が失われた場合でも、これらのサイトが重要な情報、ドキュメント、およびデータに高速にアクセスし続けることができます。
フォーム(特定のタスクのために記入する必要のある厄介な紙片)のリストと管理を改善している最中です。これには、すべてのフォームのデータベースを確立することが含まれます。
ただし、組織は各サイトのMSSQL Serverインスタンスに投資するほど賢くはないため、データベースを複製してローカルSQLServerからデータベースにアクセスすることはできません。
これを回避するために、必要なデータを表示する一連のビュー(ASPページ)を作成しました。次に、VBScriptでMsxml2.ServerXMLHTTPを使用する予定です。これにより、結果のページを読み取り、出力をサーバー上の静的ファイルに保存できます。
そこから、既存のレプリケーションプロセスで、これらのファイルをサイトにストリーミングできます。ユーザーは、データベース出力から生成されたばかりの静的ページを見ていることに気づきません。
コード
' Forms - Static Page Generator
' Implimented 2011-02-15 by Michael Harris
' Purpose: To download the contents of a page, and save that page to a static file.
' Target category: 1 (Contracts)
' Target Page:
' http://sharename.fpc.wa.gov.au/corporate/forms/generator/index.asp
' Target path: \\servername\sharename\corporate\forms\index.asp
' Resulting URL: http://sharename.fpc.wa.gov.au/corporate/forms/index.asp
' Remove read only
' Remove read only flag on file if present to allow editing
' If file has been set to read only by automated process, turn off read only
Const READ_ONLY = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("\\server\sharename\corporate\forms\index.asp")
If objFile.Attributes AND READ_ONLY Then
objFile.Attributes = objFile.Attributes XOR READ_ONLY
End If
Dim webObj, strURL
Set webObj = CreateObject("Msxml2.ServerXMLHTTP")
strURL = "http://sharename.fpc.wa.gov.au/corporate/forms/generator/index.asp"
webObj.Open "GET", strURL
webObj.send
If webObj.Status=200 Then
Set objFso = CreateObject("Scripting.FileSystemObject")
Set txtFile = objFso.OpenTextFile("file:\\servername.fpc.wa.gov.au\sharename\corporate\forms\index.asp", 2, True)
txtFile.WriteLine webObj.responseText
txtFile.close
ElseIf webObj.Status >= 400 And webObj.Status <= 599 Then
MsgBox "Error Occurred : " & webObj.Status & " - " & webObj.statusText
Else
MsgBox webObj.ResponseText
End If