【发布时间】:2009-09-11 11:51:09
【问题描述】:
我有一个 .NET 客户端应用程序调用我的 .NET Web 服务,而后者又调用第三方 Web 服务,例如,“www.foo.com”。
.NET Client -> 'My Web Service' -> 'Third Party Web Service'
从 Visual Studio 2008 开始,一切正常,也就是说,我在 localhost:someport 中运行“我的 Web 服务”,它成功调用了“第三方 Web 服务”。
然后我将“我的 Web 服务”发布到 Windows 2003 Server 机器上。
现在,当“我的 Web 服务”调用“第三方 Web 服务”时,我得到了异常,
“System.Net.WebException:无法解析远程名称:'www.foo.com'。”
我尝试了以下方法:
在部署“我的 Web 服务”的服务器上,我打开 Internet Explorer 并输入 Web 服务地址“http://www.foo.com/somewebservice.asmx”。 这很成功,因为显示了可用 Web 服务方法的列表。
在“我的网络服务”的
web.config文件中,我更改了“第三方网络服务”的 URL 从网站名称到其 IP 地址。 这失败了,出现异常“System.Net.Sockets.SocketException:套接字操作是 尝试访问无法访问的网络”。然后我编写了一个简单的 Windows 窗体测试工具来调用“第三方 Web 服务”。 我在服务器上运行了这个测试工具,它调用了“第三方 Web 服务” 成功了。
然后我尝试了不同的第三方 Web 服务,该服务的行为与上述 1、2 和 3 中的行为相同。
最后,我将 IP 地址添加到服务器上的“hosts”文件中,但得到了相同的“无法解析远程名称”错误,尽管这次要快得多! 如果是 DNS 问题,那么我不希望我的测试 1 和 3 能够正常工作。
我该如何解决这个问题?
【问题讨论】:
-
这很可能是由于与服务器上 IIS 中的网站/服务相关的安全设置。这些设置中的某些内容阻止它调用其他服务器。您也应该尝试在 ServerFault 上发布此内容。
-
您是否有 ISA 服务器或某些防火墙或代理?
-
最后还是代理服务器的问题。例外信息是一条红鲱鱼。为了解决这个问题,我使用代理服务器的 IP 地址和端口创建了一个 WebProxy 实例: WebProxy proxy = new WebProxy( proxyServerIPAddress, Convert.ToInt32( proxyServerPort ) ); myService.Proxy = 代理;
标签: .net web-services