[編集] クライアントでコンストラクターと呼び出しコードを使用して D を編集し、OnDeserializing() および OnDeserialized() メソッドを作成しました。
WCF サービス (名前付きパイプ経由) とクライアントがあります。オブジェクト (およびできればそのオブジェクトの参照) を OperationContract の引数として渡す必要があります。
[DataContract]
public class D
{
[DataMember]
public int Id;
[DataMember]
public string StrId;
//...
public D(int id, string strid)
{
Id = id;
StrId = strid;
//...
}
[OnDeserialized]
void OnDeserialized(StreamingContext strmCtx)
{
} // breakpoint here (1)
[OnDeserializing]
void OnDeserializing(StreamingContext strmCtx)
{
} // breakpoint here (2)
}
そしてこれはサービス契約です:
[ServiceContract]
public interface ICalc
{
[OperationContract]
int Calculate(string date, int count);
// d is input of this method, and count and array are outputs.
[OperationContract]
int getArray(ref int count, ref int[] array, D d);
}
これは、getArray が呼び出されているクライアント コードです。
proxy.getArray(ref myCount, ref myIntArray, new D(source))
私もこれを試しました:
D d = new D(source)
proxy.getArray(ref myCount, ref myIntArray, d)
どちらの場合も、サービス コード (getArray メソッドのコード) で d を受け取った場合、そのフィールドはすべて null です。何故ですか?私が見逃しているものはありますか?
(トレースを有効にし、トランスポート層でメッセージを確認することを使用して) フィールドのトランスポート層の値がネットワーク上で正しく転送されていることがわかっています。また、OnDeserialized() および OnDeserializing() メソッドをオブジェクトに追加して、そこにブレークポイントを配置できるようにしました。ブレークポイント (1) および (2) では、すべてのフィールドが null です ?!! 実際、オブジェクトセッターはまったく呼び出されていません!!
私はここでアイデアを使い果たしています....