34

作成したWSDLでwsdl.exeを実行すると、次のエラーが発生します。

エラー:名前空間「SomeNS」からバインディング「SomeBinding」をインポートできません。

  • 操作'someOperation'をインポートできません。
  • これらのメンバーは派生しない場合があります。

私はドキュメントリテラルスタイルを使用しており、私の知る限り、すべてのルールに従っています。

要約すると、有効なWSDLがありますが、ツールはそれを好みません。

私が探しているのは、誰かがwsdl.exeツールの経験が豊富で、私が知らない秘密の落とし穴について知っているかどうかです。

4

6 に答える 6

57

私は同じエラーメッセージに出くわしました。しばらく掘り下げた後、wsdl ファイルに加えて xsd ファイルを提供できることがわかりました。したがって、次のように wsdl コマンドの最後に .wsdl に加えて .xsd ファイルをインクルード/インポートします。

wsdl.exe myWebService.wsdl myXsd1.xsd myType1.xsd myXsd2.xsd ...

Wsdl はいくつかの警告を出しましたが、正常なサービス インターフェイスを作成しました。

于 2009-01-23T14:05:24.403 に答える
8

時々あなたはあなたのコードを変更しなければなりません。メッセージのパーツ名は同じであってはなりません;)

<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>
于 2010-11-24T17:51:02.227 に答える
5

私の場合、問題は異なり、ここでよく説明されています:

パーツの名前が「パラメーター」である場合は常に、.Net は doc/lit/wrapped が使用されると想定し、それに応じてプロキシを生成します。「パラメータ」という単語が使用されていても、(最後の例のように) wsdl が doc/lit/wrapped ではない場合、.Net で何らかのエラーが発生する可能性があります。どのエラー?あなたは正しく推測しました:「これらのメンバーは派生していない可能性があります」。これで、エラーの意味を理解できます。.Net は、doc/lit/wrapped が使用されていると見なして、ルート要素を省略しようとします。ただし、この要素はダミーではないため削除できません。いくつかの派生型からユーザーが積極的に選択する必要があります。

修正は次のとおりで、私にとっては完璧に機能しました。

これを修正するには、wsdl をテキスト エディターで開き、パーツ名を"parameters"から" parameters1" に変更します。これで、.Net は doc/lit/bare プロキシを生成することを認識します。これは、新しいラッパー クラスがプロキシのルート パラメータとして表示されることを意味します。これは少し退屈な API かもしれませんが、ワイヤ形式には影響せず、プロキシは完全に相互運用可能です。

(私による強調)

于 2015-11-20T12:16:59.337 に答える
4

@thehhvソリューションは正しいです。手動で sを追加する必要のない回避策があります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(または、マシン上のどこにでもクライアントを生成します-「書き込みファイル」を読み取るコンソール出力を確認してください)

ここに画像の説明を入力

これで時間が節約できることを願っています。

于 2014-12-02T15:20:22.933 に答える
0

UPS Shipping wsdl でこれを行っていて、異なる地域 (debug、dev、prod) などでビルドするときに dev を prod URL にスワップしたい場合は、以下のコマンドを使用して vb または C# ファイルをShip.wsdl を実行してから、この場合の 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
于 2018-10-10T22:30:00.940 に答える