0

我想通过 Internet 向 .NET webservice 发送请求,但问题是 WSDL 中的 SOAP 地址有一个私有 IP 地址:

<soap:address location="http://10.10.1.1/xxxxx/yyyyyyyyyy.asmx" />

当我尝试发送一些请求时,例如使用 PHP 和 NuSOAP,我在这个位置收到错误:

HTTP 错误:无法打开与服务器的套接字连接http://10.10.1.1/xxxxx/yyyyyyyyyy.asmx,错误 (110):连接超时

这是正常的吗?另一方面,它正在使用 BizTalk,我认为他们不知道如何解决它。

我更喜欢类似SOAP::Liteor的 Perl 解决方案SOAP::XML::Client::DotNet,但我认为像 NuSOAP 这样的解决方案会比 Perl 解决方案更容易。

4

3 回答 3

0

WSDL 已通过浏览器内置在本地机器中。如果您输入 url,您可以在 Asp.Net 中访问 WSDL

http://10.10.1.1/xxxxx/yyyyyyyyyy.asmx?WSDL

端点可以更改,您应该在调用 Web 服务时,在放置凭据之后或之前放置特定的 url

于 2013-03-07T15:51:03.363 回答
0

正如 doterob 所建议的那样,BizTalk 需要将 Web 服务公开到 Internet,以便您能够访问 WSDL 并使用它。这样做时,他们会暴露一个面向互联网的地址(例如http://web-service.biztalk.com/service.asmx?wsdl

获得 WSDL 的副本后,创建一条可供 Web 服务使用的消息,并将您的应用程序配置为使用面向 Internet 的地址用于 Web 服务。包含在 WSDL 中的本地网络地址 (10.10.1.1) 假定您将使用来自 LAN 的服务,而不是外部网络(即互联网)。

我不会在这里讨论将 BizTalk Web 服务粘贴在 Internet 上的安全隐患,但这当然不是推荐的最佳做法!但是,我建议至少使用基于证书的身份验证来保护 Web 服务。

于 2013-03-13T10:52:23.810 回答
0

我已经使用XML::Compile::WSDL11将端点从私有地址更改为公共地址。

像这样的东西:

my $wsdlfile = XML::LibXML->new->parse_file("http://$publicIP/wsdl");
my $wsdl = XML::Compile::WSDL11->new($wsdlfile);
my $call = $wsdl->compileClient(
    'operation',
    server => $publicIP # This change the server address to a specified address
);
于 2013-03-15T09:51:38.207 回答