WCFではまった落とし穴

メモ代わりに。

WCFサービスを使って自作クラスのインスタンスを送受信したい場合、
クラスに「DataContract」属性を、
プロパティに「DataMember」属性をつけるのですが、
このとき、プロパティは必ず
set, getの両方を付ける必要があるみたいです。
○OK


[DataContract]
public class Hoge
{
[DataMember]
public string Hello { get; set; }
}
○NG

[DataContract]
public class Hoge
{
[DataMember]
public string Hello
{
get { return "Hello"; }
}
}
setまたはgetが欠けていてもコンパイルは通ります。
が、クライアント側で
「サービスの更新」「サービスの追加」をしたときに次のような
エラーが発生します。

コンテンツの種類 application/soap+xml; charset=utf-8
サービス XXX.svc でサポートされていませんでした。
クライアントとサービスのバインドが整合していない可能性があります。
リモート サーバーがエラーを返しました: (415) Unsupported Media Type
サービスが現在のソリューションに定義されている場合は、
ソリューションのビルドとサービス参照の追加を再試行してください。
WCFの仕組みを理解していれば一目瞭然なのかもしれませんが、
もうちょいわかりやすいエラーメッセージを出しておくれorz


ちなみにこういうのはOK。

[DataMember]
public string Hello
{
get { return "Hello"; }
set { } // 何も書かない
}