2009-07-27 9 views
8

私は基本HTTPとクライアントの両方を許可するWCF Webサービスを持っています。どちらもHTTPSで、ユーザー名は&です。これは、同じサービス上の2つのバインディングによって実現されます。PHPを使用して複数のバインディングを使用してWCF Webサービスを呼び出す

ので、サービスはhttps://foo.com/Service.svcであり、基本的なHTTP(SOAP 1.1)エンドポイントはhttps://foo.com/Service.svc/Unp11で、WS-HTTP(SOAP 1.2)エンドポイントがhttps://foo.com/Service.svc/Unpです。

クライアントは、組み込みのSOAPサポートを使用してPHP 5経由でこのWebサービスにアクセスしようとしており、サービスへの接続に問題があります。彼は、SOAPメッセージがひどく形成された場合や、SOAP 1.1メッセージがSOAP 1.2エンドポイントに送信された場合(またはその逆の場合)に発生する傾向のあるHTTP 400(Bad Request)応答を取得し続けます。

私は基本的なPHPしか知っていないので、私は彼を助けることに困っています。

$client = new SoapClient('https://foo.com/Service.svc?wsdl'); 

どのようにバインディング/エンドポイントを指定しますか? PHPでこれを達成するための既知の問題はありますか?

UPDATE

[OK]をので、私は(SoapClientコンストラクタ内のSOAPバージョンを指定)、[OK] WCFサービスに接続するためにPHPを使用することができ、かつ$client->__getFunctions()を呼び出すと、すべてのWebサービス操作の正確なリストを返します。

は私が1 $client->__soapCall使用して呼び出すようにしようとすると、そこに最終的にはかなりしばらくの間、ロード、および座っているページは、エラー「エラーHTTPヘッダーフェッチ」を返します。これはどういう意味ですか、どうすれば修正できますか? (.Netクライアントからのサービスは完全に動作します)

答えて

5

今日、PHP呼び出し側に複数のバインディングを持つWCFを作成しました。場所を設定すると、WSDL版のPHPのSoapClientを使用できるようになり、バインドを使用するように指定されます。

WCF configは(2つのバインディングwsHttpとbasicHttpを持つ1つのサービス)、かなり簡単です。

PHPコード:

$client = new SoapClient("http://example.com/service.svc?wsdl"); 
$client->__setLocation("http://example.com/service.svc/basic"); 
$response = $client->MethodName(array("paramName" => "paramValue" ...)); 
1

私たちはいくつかのバインディングを持つSOAPサービスを持っています。 C#でwsdlにサービス参照を追加すると、クラスごとにクラスが作成されますが、PHPではどのバインディングを使用するかを指定できないようです - これは、バインディングに型/メソッドが競合するときに問題を引き起こします名前。しかし、一般的にはうまくいくようですが、内部的にどう対処しているのか分かりません。

私が持っている他のよくある問題は、配列や構造体のロードで常にパラメータをラップする必要があることです。サーバーがパラメータを期待していて、かなり設定していないと、正しく(Having trouble getting my head around SOAP in PHPを参照してください)

これは大いに役立ちます、ちょっとした考えです。また、PHPで書かれたサードパーティのSoapクライアント実装もありますが、それはかなり価値のあるものですが、かなり遅くなります。

+0

おかげで、これは有用でした。今私がサービスの操作の1つを呼び出すと、スクリプトは返されないようです!元の質問にいくつかの詳細を追加しました。 –

+0

おっと、長く待たずに。 "HTTPヘッダーの取得中にエラーが発生しました"と思われますか? –

関連する問題