具有私有IP地址(如SOAP地址)的WSDL是正常的吗?

时间:2013-03-07 15:45:13

标签: .net perl wsdl biztalk nusoap

我想通过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::LiteSOAP::XML::Client::DotNet这样的Perl解决方案,但我认为像NuSOAP这样的解决方案比Perl解决方案更容易。

3 个答案:

答案 0 :(得分:0)

WSDL内置了一个来自浏览器的本地机器。如果你把url

,你可以访问Asp.Net中的WSDL
http://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
);