2009-04-28 11 views
3

Javaで書かれたApache Axis 1.3を使用している第三者Webサービスを使用しています。サービスには多くのオーバーロード操作があります。 WCF Svcutilがプロキシを生成すると、オーバーロードされた操作の名前に操作名の後に番号を付けて名前を変更します。例えば:それだけでWCF:Svcutilが無効なクライアントプロキシ、Apache AXIS Webサービス、オーバーロード操作を生成します

getDataResponse getData(getDataRequest request); 

getDataResponse1 getData1(getDataRequest1 request); 

これは問題ではありませんが、Svcutilは、要求/応答メッセージを生成するとき、それはMessageContractsのWrapperNameプロパティを変更するには無視しています。

[MessageContractAttribute(
     WrapperName = "getData", 
     WrapperNamespace = "http://namespace.com", 
     IsWrapped = true)] 
    public partial class getDataRequest1 { .. } 

クライアントアプリケーションはプロキシを開こうと

は、次の例外がスローされます。

と、InvalidOperationException:RPC メッセージgetDataRequest1操作で getData1が無効なボディ名 のgetDataを持っています。それは、サービスが「getData1」を認識しないので、私は、操作を呼び出すことができませんが...

  1. 、私はWrapperName =「getData1」を変更する場合は、プロキシが開きます

getData1

でなければなりません
  • サービスは、約半数が過負荷
  • であるのはほぼ1100の操作を、持っているすべての操作は、WCFで動作するようにプロキシを生成および/または修正する方法はありますか?

    マーク

    +0

    @マーク:これまでMicrosoftにhttp://connect.microsoft.com/visualstudio/で報告したことがありますか? –

    +0

    いいえ、私はしませんでしたが、私はします。ありがとう! –

    +0

    結局、このような悪い質問ではなかったのでしょうか? :-) –

    答えて

    1

    私が見つけることができた唯一の回避策は、生成されたコードを手作業で編集し、必要のないすべてのオーバーロードを削除することです。

    +0

    これはまだ唯一のオプションですか、それとも他の方法で見つけましたか? –

    +0

    正直言って、私はまだ別の方法を見つけようとしていません。私はマイクロソフトがSvcUtilで何かをして、使用可能なクライアントを生成できることを望んでいます。しかし、私は息を止めていません。 –

    0

    は、このテキストの修正を行うと、プロキシライブラリのビルド後のスクリプトとして、それを設定しますスクリプトを書きます。

    +0

    私はよりクリーンな方法を見つけることができない場合、私はそれを行うことがあります。 –

    +0

    私がこれらの編集をスクリプト化したくない理由の一部は、生成されたcsファイルがほぼ13メガです。 –

    1

    "java"というタグがあり、Javaの質問を無視しているので、この質問は以前に表示されませんでした。あなたの質問はで、約 Javaではありませんでしたので、 "java"タグを持ってはいけません。

    svcutilは、オーバーロードされた操作の名前を変更していません。これは、オーバーロードされた操作のようなものがないためです。 WSDLには同じ名前の2つの操作がありますが、異なるメッセージを使用するという概念はありません。

    AxisからWSDLを見ると、操作に番号が付いていることがわかります。


    訂正:コメントでMark Goodは正しくWSDL 1.1は、許可証のオーバーロードを行うことを指摘しています。私は、RPCベースのサービスのコンテキストでは、メッセージ名を使って1つのオーバーロードと別のオーバーロードを区別することができます。

    しかし、彼は、演算子のオーバーロードがWS-I Basic Profile 1.1で禁止されていることを認識していないことがあります。

    4.5。3特有の操作

    wsdl:portTypeでの操作名のオーバーロードは、プロファイルによって禁止されています。

    R2304DESCRIPTIONwsdl:portTypeは、それらの名前属性の異なる値を持つ操作がなければなりません。

    この要件は、wsdl:portType内のwsdl:operationsにのみ適用されることに注意してください。 wsdl:portTypeの名前はwsdl:operationsで、他の名前と同じ名前が付いています。wsdl:portTypes


    WS-I BP1.1の詳細を読むと、WSDL 1.1のすべてが良いアイデアではない理由がわかります。

    +0

    Javaタグのない数ヶ月の間質問があり、あなたは答えなかった。私は最近、Javaのタグを追加しました。なぜなら、第3部分のソフトウェアはJavaで書かれていて、誰かがWSDLを別々に生成する方法を提供できることを期待していたからです。 私が読んだところでは、オーバーロード操作はWSDL 1.1でサポートされていました(ref http://webservices.xml.com/pub/a/ws/2003/01/08/randyray.html)。 svcutilでは、操作とWSDLに数値が付加された操作の名前を変更しないことに間違っています。もしあなたが望むなら、私はあなたに送ることができ、そして/または月曜日にスニペットを投稿することができます。 –

    +0

    私は実際に誰も投稿するすべての質問を表示しません。私は失業しているためにこの辺りにしかいなかった。私は間もなく投稿が少なくなることを願っています –

    +0

    WS-I Basic Profile 1.1では禁止されていたことに特に気づいていませんでしたが、情報に感謝します。 あなたの失業についてお詫び申し上げます。私はあなたと少ない郵便で運がいいです。 :-) –

    4

    これは価値がある(4年後)ため、WSDL.exeを手動で呼び出し、/protocol:SOAPパラメータを渡すと、この問題を回避できるようです。 UIを介してサービスクライアントを生成することは、Apache Axisによって生成されるサービスのVS2012のように、この問題の原因となっているようです。

    使用例:

    c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools>wsdl /l:cs /protocol:SOAP http://rxnav.nlm.nih.gov/RxNormDBService.xml /out:c:\drop\rxnavapi.cs 
    

    編集:sphinxxx正しくSOAPプロトコルオプションが "Add Web Reference" としてUIに露出するので、直接wsdl.exeを実行する必要はないことに注意しました。

    +1

    ありがとう、問題を解決しました!また、[詳細設定]をクリックして[Web参照の追加]を選択した場合(VS2012を使用している場合)、[サービス参照の追加]ダイアログを使用することができます。 – Sphinxxx

    0

    "旧式の" AddServiceReferenceを使用すると、VS2012でも過負荷のクラスが正しく生成されることがわかりました。

    0

    ここでは解決策はありませんでした。

    .NET2をターゲットとするvs2010プロジェクトで参照を生成してから、.NET4をターゲットとするvs2012またはvs2013のソリューションを開くことは可能です。

    関連する問題