状況
WSDLを使用して.netのWEB参照でクライアントクラスを作成すると、コンパイルは通るが、実行時に落ちる。原因
通常のWEB参照を使ってWSDLからクライアントクラスを作った場合、XSD上で下記のように、1要素のなかで maxOccursにunbounded指定がある場合
解釈の仕方が異なる(二次元配列に変換される)ため。
対処
上記のような要素がある場合は、無理やりダミー要素をつっこんだ下記のようなXSDを作成する。
<xs:sequence>
<xs:element maxoccurs="unbounded" minoccurs="0" name="requestId" nillable="true" type="xs:int">
<xs:element maxoccurs="0" minoccurs="0" name="DummyrequestId">
</xs:element></xs:element><
/xs:sequence>
- WSDL、修正したXSDファイルをネット参照できる場所に置く (今回はドロップボックス利用。ローカルでもできるのかもしれないがうまくWSDLコマンドが動作しなかった)
- コマンドプロンプトを開く
- cd C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools 場所は、WSDL.exeのある場所。バージョンによって C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 等異なる。
- wsdl /language:VB /out:Reference.vb /namespace:OrderApi https://dl.dropboxusercontent.com/u/71006786/RakutenSsdl/r.wsdl のように、コマンドをたたく(ドロップボックスの部分は1でおいた場所)
- できあがった、Reference.vbをプロジェクトに取り込んで使用。
0 件のコメント :
コメントを投稿