複合型の配列を返すSOAPサービスがあります。PHPのNuSOAPの定義は次のようになります。
// The type itself
$server->wsdl->addComplexType(
"Clip",
"complexType",
"struct",
"all",
"",
array(
"Id" => array(
"name" => "id",
"type" => "xsd:int"
)
// ---snip---
)
);
// The type of the array
$server->wsdl->addComplexType(
"ClipList",
"complexType",
"array",
"sequence",
"",
array(
"clip" => array(
"name" => "clip",
"type" => "tns:Clip",
"minOccurs" => "0",
"maxOccurs" => "unbounded"
)
),
array(),
"tns:Clip"
);
// The service
$server->register(
"GetClipList",
array(),
array(
"clips" => "tns:ClipList"
),
"urn:MyNamespace",
"urn:MyNamespace#GetClipList",
"rpc",
"encoded",
"Retrieves a list of all clips."
);
VisualStudio2010 C#プロジェクトで、生成されたWSDLに基づいて新しいサービスを追加しました。ClipList
VSは、タイプが単一のデータメンバーを持つクラスを含む、使用するプロキシクラスを作成しましたClip[]
。
ここまでは順調ですね。GetClipList()
プロキシを呼び出すと、タイプのオブジェクトCommunicationException
をタイプのオブジェクトに割り当てることができないというメッセージが表示されます。Clip[]
ClipList
したがって、返されたデータをに逆シリアル化し、 メソッドClip[]
の戻り型()を満たす必要があると想定しています。GetClipList
ClipList
GetClipList()
プロキシのの戻り値をClip[]
手動に変更すると、アプリケーションは正常に実行されます。しかし、明らかな理由で、自動生成されたクラスを変更することは避けたいと思います。
では、なぜそれがインスタンス化されClipList
てデータメンバーを埋めないのでしょうか?または、代わりに、VSがプロキシクラスを生成しないのはなぜGetClipList
ですかClip[]
。