假设您有几个类定义为
[DataContract]
public class Foo
{
[DataMember]
public List<Bar> Bars {get; set;}
}
[DataContract]
public class Bar
{
[DataMember]
public string Baz { get; set; }
}
public class Service1 : IService1
{
public bool Send(Foo foo)
{
var bars = foo.Bars;
bars[0].Baz = "test2";
return bars[0].Baz == bars[1].Baz;
}
}
[ServiceContract]
public interface IService1
{
[OperationContract]
bool Send(Foo composite);
}
假设我使用 WCF 到 WCF 以及客户端和服务器之间的共享数据契约 DLL,如果我执行以下操作
static void Main(string[] args)
{
using (var client = new ServiceReference.Service1Client())
{
var bar = new Bar();
bar.Baz = "Start";
List<Bar> bars = new List<Bar>();
bars.Add(bar);
bars.Add(bar);
var foo = new Foo();
foo.Bars = bars;
Console.WriteLine(bars[0].Baz == bars[1].Baz);
bars[0].Baz = "test1";
Console.WriteLine(bars[0].Baz == bars[1].Baz);
Console.WriteLine(client.Send(foo));
Console.ReadLine();
}
}
I get True
, True
, False
作为我的结果,这意味着bars[0]
and bars[1]
没有指向服务器上的同一个对象。
我是否做错了什么,或者是否不可能通过 WCF 共享引用?
你必须显式告诉 WCF 保留引用 http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractattribute.isreference.aspx通过指定
[DataContract(IsReference = true)]
否则,在消息构造期间,引用相等性将会丢失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)