3

我有 WCF 服务。它有多个客户端和三个端点。端点绑定是 nettcp、wsHttp 和 basicHttp。如果我尝试通过 php 的内置 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 的绑定吗?我可以在不同的绑定上生成不同的 wsdls。我不想部署两个服务主机。

4

3 回答 3

1

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

我能想到的唯一其他方法是公开从 WsdlExporter 构建的您自己的自定义元数据端点(请参阅此处

祝你好运!

于 2009-12-20T06:39:16.790 回答
0

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

于 2010-01-17T00:30:53.157 回答
0

我向 PHP 提交了功能请求。如果他们执行此操作,我会将其标记为正确答案。不过,我仍然愿意接受更好的解决方法。

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

于 2010-01-08T21:54:13.333 回答