2009-06-15 10 views
8

私はASP.NET Webサービスを持っています。このWebサービスは正常に動作します。ただし、WSDLにはオプションのパラメータ(minoccurs = 0)とその他のパラメータは非オプションとしてリストされています。オプションのパラメータのいくつかは実際にはオプションではなく、非オプションとしてマークされているものは実際にはオプションです。私はこれを修正したいと思いますが、この情報がどこから来ているのかわかりません。ASP.NET Webサービスのオプションパラメータ

すべてのプリミティブ型(int、booleanなど)はオプションではなく、他のすべてのパラメータはオプションとしてマークされているようです。しかし、私はこれを変更できる場所を見つけることができません。プリミティブ値が要求にない場合は、プリミティブ値のデフォルト値を指定し、実際にはオプションではないプリミティブパラメータを指定したいと思います。私はどこでこれを行うのですか?

答えて

7

ASP.net Webサービスとは、ASMX拡張機能を持つWebサービスを作成すると仮定しています。このケースで何が起きるかは、すべてのnull可能な型はオプションになり、nullを許可しない型は非オプションになります。

生成されたWSDLファイルを手動で編集することができます。しかし、wsdlが再生成された場合は、その作業をやり直す必要があります。

私は、basisHttpBindingを使ってWCFに切り替えることをお勧めします(クライアントがその違いに気付かないようにするサービスの名前を除いて)。必要かどうかなどWCFを使用して

は、あなたは、単にデータコントラクトでパラメータをマークすることができます

[DataMember(IsRequired="false")] 
+0

この答えはほぼ完全に偽です。オプションのパラメータの代わりにnullablesを使用することはできません。 .Net 4.0以降、任意の方法で[optional parameters](http://msdn.microsoft.com/en-us/library/dd264739.aspx)を使用することができます。 – Bora

+1

@Bora、答えは2009年からです。その時、これは利用可能なものでした。 –

+0

それには何も問題ありません。あなたの答えを更新すれば、すべてがうまくいくでしょう。 – Bora

6

プリミティブは参照タイプではなく、むしろ彼らはタイプです。 のタイプを「nullable」にすることができます。

短い手が

int? i; 

または長い手がここに

Nullable<int> i; 
+0

どのようにパラメータを省略して(そしてデフォルトを使用するか)、値をNULLに設定したいかを区別しますか? – Shiv