2012-01-17 8 views
2

WCFサービス(.NET4.0)があります。クライアントは.NET2.0にあります。クライアントによってサービスに渡されるEnum値は、常にenumのデフォルト値(最初の列挙型メンバー)で設定されます。.NET2.0クライアントからWCFサービスに正常に渡されない列挙

これは.NET2.0の問題ですか?回避策はありますか?

+0

見つかりましたすべての列挙型フィールドの指定フィールド(bool)。これらの<>指定されたフィールドをtrueに設定し、enumメンバー内に値を設定すると、WCFサービスは正確に渡された値を取得できます。 Specifiedフィールドが設定されていない場合(デフォルトはfalse)、enumのデフォルト値のみが受信されます。なぜこの動作? – ideafountain

+0

これらのプロパティはオプションであるためです。それらが存在することを示す唯一の方法は、この別のフィールドです。必要な場合は、フィールドは必要ありません。 –

+0

ジョンに感謝します。私はdatamemberのIsRequiredプロパティを指定し、の指定フィールドは消え、クライアントによって設定された値も受け取られました。これは、int、bool、enumsのような.NETのデフォルト値を持つすべてのデータ型にとってそうであるようです。 – ideafountain

答えて

2

<FieldName> XmlSerializerで使用される機能が指定されています。私は以前これに襲われてきた。それは誰もが似たような痛みを伴う方法でこの機能について知っている。

これがfalseに設定されていると、フィールドはシリアル化されません。 Unfortunatly falseはブール値フィールドのデフォルトですので、設定を忘れると非常に迷惑になります。

この機能がわからない場合は、 FieldName >フィールドを削除しても問題はありません。次に、フィールドは常にシリアル化されます。

これらのフィールドは、.NET 2でXmlSerializerを使用しているため違いがあります。.NET 4 WCFアプリケーションでは、この機能を持たないDataContractSerializerを使用しています。

enumのデフォルト値は、WCFでは実際には受信されません。実際には、その列挙のためにサーバー上に何も受信されません。したがって、enumは設定されていないため、デフォルト値のままです。

+0

ありがとうBuh Buh。私は生成されたメタデータを編集しないで、代わりにdatamemberのIsRequiredプロパティを設定し、これがうまくいった。 – ideafountain

+0

はい、あなたのソリューションが優れています。 :) –

関連する問題