15

このシグネチャを使用して、param2 が空のままの場合に例外をスローしない Web サービスを構築したいと考えています。これは可能ですか?

[WebMethod]
public string HelloWorld(string param1, bool param2) { }

例外は、空の文字列をブール値に変換しようとしたときにスローされる System.ArgumentException です。

これまでうまくいかなかったアイデア:

  • メソッドのオーバーロードは、次のような Web サービスでは許可されていません。

    public string HelloWorld(string param1)
    {
        return HelloWorld(param1, false);
    }
    

ここで提案されているように:

私の質問はこの質問に関連していますが、唯一の回答は、まだ使用していない WCF 契約を指しています。

4

8 に答える 8

13

MessageName 属性を使用して、Web サービスでオーバーロードされたメソッドを使用できます。これは、オーバーロード機能を実現するための回避策です。

http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspxを見てください。

[WebMethod(MessageName="Add3")]
public double Add(double dValueOne, double dValueTwo, double dValueThree)
{
   return dValueOne + dValueTwo + dValueThree;
}

[WebMethod(MessageName="Add2")]
public int Add(double dValueOne, double dValueTwo)
{
   return dValueOne + dValueTwo;
}

メソッドは外部から見えるようになりますAdd2Add3

于 2009-11-12T16:45:34.163 に答える
7

私はこの投稿が少し古いことを知っています。しかし、Rasikの例では、メソッド名は同じである必要があると思います。両方のメソッド名が同じである場合、オーバーロードが発生します。私はそれがこのようになるべきだと思います:

[WebMethod(MessageName="Add3")]
public double Add(double dValueOne, double dValueTwo, double dValueThree)
{
   return dValueOne + dValueTwo + dValueThree;
}

[WebMethod(MessageName="Add2")]
public int Add(double dValueOne, double dValueTwo)
{
   return dValueOne + dValueTwo;
}
于 2012-06-25T14:43:05.853 に答える
1

Web サービス メソッドをオーバーロードすることはできません。SOAP プロトコルはサポートしていません。Rasik のコードは回避策です。

于 2009-11-12T16:47:35.717 に答える
1

パラメータbool?を作成し、呼び出し元に明示的な null を送信させることも、回避策として機能します。

于 2021-07-26T17:37:39.147 に答える
0

オプションの引数はすべて文字列にします。引数が渡されない場合、入力は null として扱われます。

于 2014-03-10T19:20:15.760 に答える