2013-03-07 94 views
0

我想请求发送到通过互联网.NET Web服务,但问题是WSDL中的SOAP地址具有私有IP地址:具有私有IP地址(如SOAP地址)的WSDL是否正常?

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

当我尝试发送一些请求,PHP和的NuSOAP例如,我得到一个错误与此位置:

HTTP Error: Couldn't open socket connection to server http://10.10.1.1/xxxxx/yyyyyyyyyy.asmx , Error (110): Connection timed out

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

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

回答

0

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

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

我不会进入安全含义坚持在互联网上生活的BizTalk网络服务姿势在这里,但这当然不建议最佳实践!不过,我会建议网络服务以基于证书的身份验证保证最低限度。

0

WSDL在浏览器中内置了本地机器。如果你把网址,您可以访问到WSDL在Asp.Net

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

端点可以改变,你应该把具体的网址,当你调用Web服务,之后或之前你把凭证

+0

谢谢,但我不知道是否我一直误解。我无法更改WSDL,因为它不是我的。 – dayer 2013-03-07 16:15:50

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 
);