wsdl.exeエラー:バインディング「…」をネームスペース「…」からインポートできません
質問
作成した WSDL で wsdl.exe を実行すると、次のエラーが発生します。
エラー:バインディング 'SomeBinding' を名前空間 'SomeNS' からインポートできません。
- オペレーション 'someOperation' をインポートできません。
- これらのメンバーは派生しない場合があります。
私はドキュメント リテラル スタイルを使用しており、私の知る限りではすべてのルールに従っています。
要約すると、有効な WSDL はありますが、ツールはそれを好みません。
私が探しているのは、wsdl.exe ツールの経験が豊富で、私が知らない秘密の落とし穴について知っている人がいるかどうかです。
解決
同じエラーメッセージが表示されました。しばらく調べてみたところ、wsdl ファイルに加えて xsd ファイルも提供できることがわかりました。そのため、次のように wsdl コマンドの最後に .wsdl に加えて .xsd ファイルを含めるかインポートしました。
wsdl.exe myWebService.wsdl myXsd1.xsd myType1.xsd myXsd2.xsd ...
Wsdl はいくつかの警告を出しましたが、正常なサービス インターフェイスを作成しました。
他のヒント
場合によってはコードを変更する必要があります。メッセージの部分名は同じであってはなりません ;)
<wsdl:message name="AnfrageRisikoAnfrageL">
<wsdl:part name="parameters" element="his1_0:typeIn"/>
</wsdl:message>
<wsdl:message name="AnfrageRisikoAntwortL">
<wsdl:part name="parameters" element="his1_0:typeOut"/>
</wsdl:message>
これに:
<wsdl:message name="AnfrageRisikoAnfrageL">
<wsdl:part name="in" element="his1_0:typeIn"/>
</wsdl:message>
<wsdl:message name="AnfrageRisikoAntwortL">
<wsdl:part name="out" element="his1_0:typeOut"/>
</wsdl:message>
@thehhvソリューションは正しいです。追加する必要のない回避策があります xsd
手作業で。
ではなく、あなたのサービスに行きましょう ?wsdl
に行く ?singleWsdl
(以下のスクリーンショット)
次に、ページを名前を付けて保存します .wsdl
ファイル(提供されます) .svc
だから変更してください)
それから開きます Visual studio command prompt
(Win 7) [スタート] -> [すべてのプログラム] -> [Visual Studio 2013] -> [Visual Studio ツール] -> [VS2013 x64 ネイティブ ツール コマンド プロンプト] で見つけることができます (同様のものである可能性があります)。
次に、次のコマンドを実行します Visual studio command prompt
(C:\WebPricingService.wsdl の代わりに、wsdl を保存した場所になります。ただし、私たちが非常によく似ていて、心配な同じファイル名と場所を選択した場合を除きます)
wsdl.exe C:\WebPricingService.wsdl
@thehhvが言ったように、いくつかの警告が表示されるはずですが、それでもクライアントが生成されます C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\WebPricingService.cs
(またはマシン上のどこにでも - 「ファイルの書き込み中」と表示されるコンソール出力を確認してください)
これで時間を節約できることを願っています。
私の場合、問題は異なりましたが、詳しく説明されています ここ:
パーツの名前が「parameters」である場合、.Net は doc/lit/wrapped が使用されると想定し、それに応じてプロキシを生成します。「パラメータ」という単語が使用されているにもかかわらず、wsdl が doc/lit/wrapped ではない場合 (最後の例のように)、.Net はエラーを引き起こす可能性があります。どのエラーですか?あなたは正しく推測しました:「これらのメンバーは派生しない可能性があります。」これで、エラーの意味が理解できました。.Net は、doc/lit/wrapped が使用されていると考えるため、ルート要素を省略しようとします。ただし、この要素はダミーではないため削除できません。ユーザーがいくつかの派生型から積極的に選択する必要があります。
修正は次のとおりで、私にとっては完璧に機能しました。
これを修正する方法は、テキスト エディターで wsdl を開き、パーツ名を "パラメーター" に 「パラメータ1」. 。これで、.Net は doc/lit/bare プロキシを生成することを認識できるようになります。これは、新しいラッパー クラスがプロキシのルート パラメーターとして表示されることを意味します。これは少し面倒な API かもしれませんが、ワイヤ形式には影響せず、プロキシは完全に相互運用可能です。
(強調は私)
誰かがこの壁にぶつかった場合に備えて、私の場合のエラーの原因は次のとおりです。
手術があります:
<wsdl:operation name="FormatReport">
<wsdl:documentation>Runs a report, which is returned as the response</wsdl:documentation>
<wsdl:input message="FormatReportRequest" />
<wsdl:output message="FormatReportResponse" />
</wsdl:operation>
これは入力を受け取ります:
<wsdl:message name="FormatReportRequest">
<wsdl:part name="parameters" element="reporting:FormatReportInput" />
</wsdl:message>
そして別の操作:
<wsdl:operation name="FormatReportAsync">
<wsdl:documentation>Creates and submits an Async Report Job to be executed asynchronously by the Async Report Windows Service.</wsdl:documentation>
<wsdl:input message="FormatReportAsyncRequest" />
<wsdl:output message="FormatReportAsyncResponse" />
</wsdl:operation>
入力を受け取る:
<wsdl:message name="FormatReportAsyncRequest">
<wsdl:part name="parameters" element="reporting:FormatReportInputAsync" />
</wsdl:message>
また、入力要素は 2 つのタイプのインスタンスです。
<xsd:element name="FormatReportInput" type="reporting:FormatReportInputType"/>
<xsd:element name="FormatReportInputAsync" type="reporting:FormatReportAsyncInputType"/>
ここに問題があります - reporting:FormatReportAsyncInputType
型は拡張 (派生) します。 reporting:FormatReportInputType
タイプ。それがツールを混乱させ、「これらのメンバーが派生していない可能性がある」と思われるものです。エラー。受け入れられた回答の次の提案を回避できます。
UPS Shipping wsdl を使用してこれを実行しており、異なるリージョン (debug、dev、prod) などに向けてビルドするときに dev の URL を prod の URL に交換したい場合。以下のコマンドを使用して、Ship.wsdl から vb または C# ファイルを生成し、この場合は Ship.vb ファイルの値をオーバーライドします。
WSDL /Language:VB /out:"C:\wsdl\Ship.vb" "C:\wsdl\Ship.wsdl" C:\wsdl\UPSSecurity.xsd C:\wsdl\ShipWebServiceSchema.xsd C:\wsdl\IFWS.xsd C:\wsdl\common.xsd