Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 为什么我可以从浏览器而不是应用程序访问WSDL文件?_.net_Web Services_Vb6_Asmx - Fatal编程技术网

.net 为什么我可以从浏览器而不是应用程序访问WSDL文件?

.net 为什么我可以从浏览器而不是应用程序访问WSDL文件?,.net,web-services,vb6,asmx,.net,Web Services,Vb6,Asmx,我们在部署在开发环境中工作但在生产环境中不工作的web服务时遇到问题。部分问题在于我们的生产服务器是负载平衡的,因此要升级其中一台服务器,我们必须将其从负载平衡中移除,并尝试隔离测试服务器,这是一个挑战 我正在使用的计算机名为Web01,我用来测试的计算机名为Ts01。在这两台机器上,我修改了hosts文件,将example.com重定向到Web01上网站的相应IP 我正在测试在每台机器上访问web服务的两种方式: 对http://www.example.com/services/myserv

我们在部署在开发环境中工作但在生产环境中不工作的web服务时遇到问题。部分问题在于我们的生产服务器是负载平衡的,因此要升级其中一台服务器,我们必须将其从负载平衡中移除,并尝试隔离测试服务器,这是一个挑战

我正在使用的计算机名为
Web01
,我用来测试的计算机名为
Ts01
。在这两台机器上,我修改了hosts文件,将
example.com
重定向到
Web01
上网站的相应IP

我正在测试在每台机器上访问web服务的两种方式:

  • http://www.example.com/services/myservice.asmx?WSDL
  • 一个VB6测试应用程序,它使用上面通过
    SOAPClient
    引用的WSDL调用web服务
以下是测试结果:

Browser VB6 App Ts01 OK OK Web01 OK ERROR SOAPClient(来自VB6应用程序):


我不确定这些信息是否有用,但也许有用。

这里有一个通用模式:

Q:“x”在浏览器中工作,但在执行与浏览器相同操作的程序中失败。怎么了

答:程序所做的事情与浏览器所做的不同

浏览器显式设置程序未设置的头(特别是因为您使用的是非常过时的SOAPClient)。各种网络设备和软件在决定如何响应您的请求时可能会查看这些标题


您应该使用或其他方式查看这两种情况(浏览器和程序)的网络流量,然后仔细查看浏览器行为方式和程序行为方式之间的差异。然后,您可以将程序更改为类似于浏览器,或者请您的网络联系人降低安全性,以便您的程序可以访问该服务。

另一个要查看的是浏览器中的代理设置,您是否正在使用代理?VB6从Internet Explorer中获取部分(但不是全部)代理设置,但不从任何其他浏览器获取任何代理设置

如果Fiddler不起作用,您可能不得不卷起腰包深入研究,以找出VB6无法通信的原因

另一个需要注意的重要问题是,您使用的是什么SOAP客户端?(微软过时的、有缺陷的客户端、PocketSOAP、自制的东西?)一个建议可能是为.Net编写soap代理,然后使用interop来处理soap。

“WSDLReader错误'80020009” WSDLReader:XML解析器在行号0、行位置0处失败,原因是:无法解析服务器名称或地址HRESULT=0x1:函数不正确。-WSDLReader:加载WSDL文件失败HRESULT=0x80070057:参数不正确。-客户端:提供的参数之一无效。HRESULT=0x80070057:参数不正确。”

Windows Update损坏的注册表和web应用程序将不会启动与web服务相关的任何对象,并且您将收到此错误。
尝试重新注册SOAP客户端和SOAP DLL或尝试重新安装它们。

WSDL文件和/或服务本身可能需要身份验证。在我的情况下(假设使用基本身份验证),我必须向SOAP连接URL提供凭据,因此:

http://www.example.com/services/myservice.asmx?WSDL
变成:

http://user:password@www.example.com/services/myservice.asmx?WSDL
当然,这在公共互联网上是完全不安全的,所以你应该使用HTTPS。如果可能的话,您还应该限制仅与受信任主机的连接

这可能适用于浏览器或MSXML的某些安全更新,也可能不适用:

在这种情况下,您可能必须使用其他方法提供凭据。如果您可以在没有凭据的情况下访问WSDL文件,那么仍然可以使用凭据保护服务,并将其传递到SOAP信封中:

  sc.ssoapinit(WSDLURL)
  sc.ConnectorProperty("AuthUser") = "user"
  sc.ConnectorProperty("AuthPassword") = "password"  

有同样的问题。代码可以在我的机器上运行,但不能在客户机上运行。必须加载IE工具Internet选项并单击高级。向下滚动至安全并取消选中“不要将加密页面保存到磁盘”

您是否考虑过这可能是权限错误?Web01上的VB6应用程序可能没有进行SOAPClient调用的权限。我不认为这是编程问题;它属于ServerFault您是否通过Web代理访问远程计算机?@Joel我不确定,但我会检查它。@0xA3通过Web代理访问意味着什么?我通过远程桌面(mstsc.exe)登录到这两台计算机。这就是你的意思吗?这是一个很好的建议,尤其是使用小提琴的想法。我没有想过这样做来检查请求头。我想最让我吃惊的是,它在一台机器上工作,而不是真正负责打电话的机器。@Ben:根据你发布的标题,我会询问网络人员关于SIFR-PREFETCHED=true cookie的情况。
http://user:password@www.example.com/services/myservice.asmx?WSDL
  sc.ssoapinit(WSDLURL)
  sc.ConnectorProperty("AuthUser") = "user"
  sc.ConnectorProperty("AuthPassword") = "password"