2011-05-18 49 views
2

我有一個在Windows Server 2003(32位)上運行的VB6程序,它使用Microsoft ServerXMLHTTP對象與使用NTLM身份驗證的Web服務建立HTTP連接。要獲得認證工作,我必須通過在命令提示符下運行64位Windows Server 2008上的NTLM身份驗證和ServerXMLHTTP?

proxycfg -p proxy-server dest-web-server 

配置WinHTTP代理把目標服務器在代理繞過列表。

完成此操作後,每次對Web服務的調用都會導致3次HTTP調用到Web服務器,因爲ServerXMLHTTP對象首先嚐試匿名訪問,然後是2次調用以使NTLM身份驗證發生。這是正常的和預期的。

在命令提示符下

netsh winhttp set proxy proxy-server="proxy-server" bypass-list="dest-web-server" 

NTLM身份驗證不再工作程序遷移到Windows Server 2008(64位),並使用等效代理服務器設置後。 Web服務器日誌顯示ServerXMLHTTP對象僅創建一個匿名HTTP連接並返回401響應,並且從不嘗試嘗試NTLM身份驗證。

+0

我可能會使用SetProxy()方法根據存儲在應用程序的設置文件中的信息執行此操作。它節省了手動管理頭痛(或者至少將它隔離到應用程序的管理)並避免了這種錯誤。 – Bob77 2011-05-19 03:37:42

回答

3

解決方案的關鍵是程序從32位服務器移動到64位服務器。有32位程序和64位程序的單獨winhttp設置。

要獲得認證的再次發生,我需要打開32位命令提示符「C:\ WINDOWS \ Syswow64資料\ cmd.exe的」,並從那裏運行netsh代理設置實用程序。