繁体   English   中英

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

[英]Connecting to a WCF Service in PHP that has a a NetTCP Binding and a BasicHttpBinding

我有一个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。 我不想部署两个服务主机。

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

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

祝好运!

我用PHP提交了一个功能请求 如果他们实现了这一点,我会将此标记为正确答案。 我仍然愿意接受更好的解决方法。

更新:我提交了一个补丁来实现这个。 我正在等待它的批准。
更新:补丁致力于svn。 等待PHP的下一个版本。
更新:补丁现在是PHP 5.3.3和5.2.14的一部分。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM