[编辑] 我现在已经在客户端和 OnDeserializing() 和 OnDeserialized() 方法中使用构造函数和调用代码编辑了 D。
我有一个 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 时,它的所有字段都是空的。这是为什么?有什么我想念的吗?
我知道(使用启用跟踪并查看传输层的消息)字段的传输层值正在在线上正确传输。我还向对象添加了 OnDeserialized() 和 OnDeserializing() 方法,以便我可以在断点 (1) 和 (2) 处放置一个断点,所有字段都为空?!实际上根本没有调用对象设置器!
我的想法在这里用完了....