连接到PHP中的WCF服务,该服务具有NetTCP绑定和BasicHttpBinding

时间:2009-12-19 15:36:34

标签: .net php wcf nettcpbinding

我有一个WCF服务。它有多个客户端和三个端点。端点绑定是nettcp,wsHttp和basicHttp。如果我尝试通过php'd builtin SoapClient类连接到它,就像这样:

$service = new SoapClient
("http://service.companyname.local:6666/Service/?wsdl",
 array(
         "location" => "http://service.companyname.local:6666/Service/Basic",

    "trace" => true,
    'soap_version' => SOAP_1_1
     )
);

我得到以下内容:

PHP Fatal error:  SOAP-ERROR: Parsing WSDL: PHP-SOAP doesn't support transport 'http://schemas.microsoft.com/soap/tcp' in c:\www\client.php on line 666

现在我的解决方法是手动保存wsdl并删除nettcp绑定。有没有一种解决方法可以让我使用自动生成的wsdl?我可以在web.config中隐藏wsdl的绑定吗?我可以在不同的绑定上生成不同的wsdl。我不想部署两个服务主机。

3 个答案:

答案 0 :(得分:1)

当您说您不想部署两个服务主机时,我假设您在Windows服务中自我托管一个ServiceHost。我通过构建一个通用服务主机来解决这个问题,该主机可以在内部托管尽可能多的服务impl(例如,它是配置中每个服务条目的新ServiceHost)。这样,我可以根据需要在单个Windows服务中灵活地托管尽可能多的服务impl。这将通过允许您将basicHttp绑定服务与其他服务分开以保持WSDL清洁来解决您的问题。有一些开源示例浮动(here的)。

我能想到的另一种方法是公开自己的自定义元数据端点,从WsdlExporter构建(参见here

祝你好运!

答案 1 :(得分:0)

I filed a feature request with PHP。如果他们实现了这一点,我会将此标记为正确答案。我仍然愿意接受更好的解决方法。

更新:我提交了一个补丁来实现这一点。我正在等待它的批准 更新:修补程序已提交给svn。等待PHP的下一个版本。
更新:补丁现在是PHP 5.3.3和5.2.14的一部分。

答案 2 :(得分:0)

我目前正在研究的另一个选项是PHP的第三方soap客户端,名为WSF-PHP

相关问题