3

WCFサービスがあります。複数のクライアントと3つのエンドポイントがあります。エンドポイントバインディングは、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からバインディングを非表示にできますか?異なるバインディングで異なるwsdlを生成できますか?2つのサービスホストを展開したくありません。

4

3 に答える 3

1

2つのサービスホストをデプロイしたくないと言うときは、Windowsサービスで1つのServiceHostをセルフホスティングしていると思います。この問題を解決するために、必要な数のサービスimplを内部でホストできる汎用サービスホストを構築しました(たとえば、構成内の各サービスエントリの新しいServiceHostです)。そうすれば、必要な数のサービスimplを単一のWindowsサービスで柔軟にホストできます。これにより、basicHttpバインドされたサービスを他のサービスから分離して、WSDLをクリーンに保つことができるため、問題が解決します。これが浮かんでいるオープンソースの例がいくつかあります(ここにあります)。

私が考えることができる他の唯一の方法は、WsdlExporterから構築された独自のカスタムメタデータエンドポイントを公開することです(ここを参照)

幸運を!

于 2009-12-20T06:39:16.790 に答える
0

PHPで機能リクエストを提出しました。彼らがこれを実装する場合、私はこれを正解としてマークします。ただし、私はまだより良い回避策を受け入れています。

更新:これを実装するためのパッチを提出しました。私はその承認を待っています。
更新: svnにコミットされたパッチ。PHPの次のリリースを待っています。
更新:パッチはPHP5.3.3および5.2.14の一部になりました。

于 2010-01-08T21:54:13.333 に答える
0

私が現在調査しているもう1つのオプションは、WSF-PHPと呼ばれるPHP用のサードパーティのsoapクライアントです。

于 2010-01-17T00:30:53.157 に答える