2011-10-28 17 views
3

実際の製品では、より多くのオプションパラメータを持つことになりますが、2つのオプションパラメータで.Net Webサービスを使用してダミーWebサービスを作成しました。クエリ用のフィルタ)。問題は、Webサービスを呼び出すときにオプションのパラメータを省略することができないということです。つまり、実際のWebサービスに対して開発する際に、Webサービスへの呼び出しごとに数十のNULL値が存在する可能性があります。C#でオプションのパラメータを使用してWeb参照からWebメソッドを呼び出す

今のところ、このダミーWebサービスは2つの、オプションの文字列パラメータをサポートするために、これだけで構成されています

<s:element minOccurs="0" maxOccurs="1" name="PARAM_1" type="s:string"/> 
<s:element minOccurs="0" maxOccurs="1" name="PARAM_2" type="s:string"/> 

:それは確かにMINVALUE 0とMAXVALUE 1でこれらのパラメータを表示するWSDLでは

[WebMethod] 
public string HelloWorld(String PARAM_1="", String PARAM_2="") 
{ return ""; } 

問題はここにあります:Visual Studio 2010のWeb参照を介してこのWebサービスを追加すると、実際にはHelloWorldメソッドでサービスオブジェクトが作成されます。ただし、オプションのパラメータは考慮されていません。オプションのパラメータを持たないHelloWorld関数を作成します。これは常にPARAM_1とPARAM_2の両方を必要とするため、実際に使用したいものにかかわらず、オプションのパラメータはNULLで埋めなければなりません。

public string HelloWorld(string PARAM_1, string PARAM_2) { 
object[] results = this.Invoke("HelloWorld", new object[] { PARAM_1, PARAM_2}); 

オプションのパラメータの潜在的な数十をNULLに強制されることなく、VS2010でのオプションのパラメータを持つWebサービスを使用する方法があります:定義VS2010は、Web参照の外に生成

は、問題を示す、これでありますすべての呼び出しで?私たちはいつもこれをやらなければならないVisual Studioで便利なウェブリファレンスを使い続けたいと思っています。

+2

問題の解決策ではありませんが、Web参照の代わりにサービス参照を使用するのはなぜですか? Web参照は従来の技術であり、新しいコードには使用しないでください。 –

答えて

1

すべてのパラメータを別のクラスにラップする場合は、オプションのパラメータを作成できます。これは、特定のプロパティをオプションにすることを自分で決める新しいメッセージを表します。また、部分クラス宣言でサービス生成クラスに異なるコンストラクタを提供することもできます。

これは、メソッドオーバーロードよりも優れたソリューションです。これは、Webサービスでは機能しません。それぞれのオーバーロードに対して、少しずつ新しいメソッドを作成する必要があります。

3

オプションのパラメータは、言語固有の構文です。 SOAPベースのWebサービスは言語に依存しないため、オプションのパラメータについては何も知られていません。

サービスコールにオプションのパラメータを使用する場合は、オプションパラメータのクライアント側の感触を必要とする場合は、生成されたスタブメソッドを独自のコードで上書きする必要があります。

0

ダースのパラメータではなくダース可能なプロパティを持つ構造体を受け入れるリファクタリング方法が考えられます。

1

minOccurs = 0は、変数の出現を示します。文字列型のminOccurs = 0であるため、デフォルト値を持つことになります。

オプションのパラメータを別のタイプで使用して、wsdlをチェックできますか。

+0

http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-postsを参照してください。 –

関連する問題