我們在部署可在我們的開發環境中工作但未在生產中的Web服務時遇到問題。部分問題是我們的生產服務器負載均衡,因此要升級其中一臺服務器,我們必須將其從負載平衡中解放出來,並試圖單獨測試服務器,這是一個挑戰。爲什麼我可以從瀏覽器訪問WSDL文件,但不能從應用程序訪問?
我正在使用的計算機叫做Web01
,我用來測試的計算機叫做Ts01
。在這兩臺機器上,我修改了主機文件以將mydomain.com
重定向到Web01
上的網站的推測IP。
我測試每一臺機器上訪問Web服務的方法有兩種:
- 一個簡單的瀏覽器調用
http://www.mydomain.com/services/myservice.asmx?WSDL
。 - 一個VB6測試應用程序,它使用上面通過
SOAPClient
引用的WSDL調用Web服務。
以下是測試結果:
Browser VB6 App Ts01 OK OK Web01 OK ERROR
測試似乎除了用於安裝在Web服務器上的VB6應用程序於所有情況確定。錯誤我得到的回覆是:
-2147024809 - WSDLReader - :XML解析器未能在行號0,lineposition 0,原因是:系統無法找到對象指定WSDLReader HRESULT = 80070057的WSDL文件加載失敗。
HRESULT =爲0x1
我得到同樣的錯誤回到Ts01
,如果我在VB6應用程序提供一個糟糕的WSDL地址。似乎Web01
上的VB6應用程序無法訪問Web01
上的Web服務DLL,這是一個大問題。
值得一提的是,它也適用於我的本地開發人員計算機,我的VB6應用程序和Web服務安裝在同一臺計算機上。
爲什麼VB6應用程序在與Web服務存在的同一個框中運行時,可能無法通過SOAPClient
與Web服務進行通信?
我使用fiddler來檢查我的本地計算機上調用我們的開發服務器的請求頭。下面是瀏覽器和SoapClient的請求之間的區別:
瀏覽器:
GET http://devserver/services/myservice.asmx?WSDL HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-shockwave-flash, */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: devserver
Cookie: SIFR-PREFETCHED=true
的SOAPClient(從VB6應用程序):
GET http://devserver/services/myservice.asmx?WSDL HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
Host: hbhswebnet
Connection: Keep-Alive
Pragma: no-cache
我不知道,如果這些信息是有幫助的,但也許它是。
你認爲這可能是一個權限錯誤? Web01上的VB6應用程序可能沒有權限進行SOAPClient調用。 – 2010-07-30 19:07:31
我不認爲這是一個編程問題;它屬於ServerFault – 2010-07-30 19:12:56
您是否正在通過Web代理訪問遠程計算機? – 2010-07-30 19:28:30