我想通过Internet向.NET Web服务发送请求,但问题是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::Lite
或SOAP::XML::Client::DotNet
这样的Perl解决方案,但我认为像NuSOAP这样的解决方案比Perl解决方案更容易。
答案 0 :(得分:0)
WSDL内置了一个来自浏览器的本地机器。如果你把url
,你可以访问Asp.Net中的WSDLhttp://10.10.1.1/xxxxx/yyyyyyyyyy.asmx?WSDL
端点可以更改,您应该在调用Web服务时放置特定URL,在放置凭据之后或之前
答案 1 :(得分:0)
正如doterob所建议的那样,BizTalk需要将Web服务公开给互联网,以便您能够访问WSDL并使用它。在这样做时,他们将暴露面向互联网的地址(例如http://web-service.biztalk.com/service.asmx?wsdl)
获得WSDL副本后,创建可由Web服务使用的消息,并将应用程序配置为使用面向Internet的地址进行Web服务。 WSDL中包含的本地网络地址(10.10.1.1)假定您将从LAN使用该服务,而不是外部网络(即interweb)。
我不会深入探讨在互联网上提供BizTalk网络服务的安全隐患,但这肯定不是推荐的最佳做法!但是,我建议至少使用基于证书的身份验证来保护Web服务。
答案 2 :(得分: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
);