我们在部署可在我们的开发环境中工作但未在生产中的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