1

こんにちは、配列、構造体、および構造体の配列を PHP から ASP.NET SOAP サーバーに送信する際に問題が発生しています...

誰にもこれに対する解決策がありますか?私は何日もグーグルで検索しましたが、解決策はすべてうまくいきました。多分私は何かを忘れています...

私のコードの例があります:

$client = new SoapClient($options);

$pCriteria = new stdClass();
$pCriteria->type=1;
$pCriteria->capacity=4;

//Test 1 (fail):
$resp = $client->GetRooms(array("pCriteria"=>$pCriteria));

//Test 2 (fail):
$resp = $client->GetRooms(array("pCriteria"=>new SoapVar($pCriteria, SOAP_ENC_OBJECT, "TCriteria", "http://www.w3.org/2001/XMLSchema")));

print_r($resp);

TCriteria の配列 (TCriteria[]、TCriteria_Array 型) を必要とする関数のコーディング方法もわかりません... 生の配列、SOAP_ENC_ARRAY エンコーディングと TCriteria_Array 型の SoapVar を送信しようとしましたが、...動作しません (SOAP サーバーが利用できなくなり、再起動する必要があります)。

stdClass の代わりに複雑な型のクラスも作成しようとしましたが、機能しませんでした。

どこに問題があるのか​​わからない。サーバー管理者は私を助けることができず、インターネット上で解決策が見つかりませんでした. 私は少し絶望的です。

助けてください。コードのサンプルを 3 つのケース (単純なデータの配列、構造体の配列、および構造体) で提供できますか? ありがとう!

4

1 に答える 1

6

PHPSoapクライアントがWSDL2.0を使用して.NETSoapServerと通信する場合にも同様の状況が発生しました。私が発見したことの1つは、サーバーに情報を渡すときに、変数をSoapVarオブジェクトとして明示的に定義する必要があるということです。したがって、上記の例では、次のように変更します。

$pCriteria->type = new SoapVar(1, XSD_INT, 'xsd:int');

配列を渡すことも同様です。基本的に、SoapVarの配列を渡します。

$pCriteria->type = array(new SoapVar(1, XSD_INT, 'xsd:int'), new SoapVar(2, XSD_INT, 'xsd:int', new SoapVar(3, XSD_INT, 'xsd:int'));`enter code here`

また、SoapClientのいくつかの組み込み関数を使用して、発生する可能性のあるエラーに関する追加のフィードバックを取得できます。

$client->__getLastRequest() //To display the XML that you sent to the server
$client->__getLastResponse() //to display the XML that is sent in response to your request

期待されるWSDL形式のコピーを取得できる場合は、上記のコマンドからの応答を使用して、何が問題になっているのかを判断できます。通常、これには、SoapClientに渡すURLからアクセスできます。したがって、たとえば、WSDLサービスのURLがhttp://example.com/webservices/wvrgroupservice.asmx?WSDLの場合、 http ://example.com/webservices/wvrgroupservice.asmxと入力して、そこから関数と予想されるXMLを表示します。サーバ。

于 2010-04-19T00:58:48.357 に答える