WCFではまった落とし穴
メモ代わりに。
WCFサービスを使って自作クラスのインスタンスを送受信したい場合、
クラスに「DataContract」属性を、
プロパティに「DataMember」属性をつけるのですが、
このとき、プロパティは必ず
set, getの両方を付ける必要があるみたいです。
○OK
○NG
[DataContract]
public class Hoge
{
[DataMember]
public string Hello { get; set; }
}
setまたはgetが欠けていてもコンパイルは通ります。
[DataContract]
public class Hoge
{
[DataMember]
public string Hello
{
get { return "Hello"; }
}
}
が、クライアント側で
「サービスの更新」「サービスの追加」をしたときに次のような
エラーが発生します。
WCFの仕組みを理解していれば一目瞭然なのかもしれませんが、
コンテンツの種類 application/soap+xml; charset=utf-8 は
サービス XXX.svc でサポートされていませんでした。
クライアントとサービスのバインドが整合していない可能性があります。
リモート サーバーがエラーを返しました: (415) Unsupported Media Type
サービスが現在のソリューションに定義されている場合は、
ソリューションのビルドとサービス参照の追加を再試行してください。
もうちょいわかりやすいエラーメッセージを出しておくれorz
ちなみにこういうのはOK。
[DataMember]
public string Hello
{
get { return "Hello"; }
set { } // 何も書かない
}