WCF可以在导线上保持引用相等吗?

Sco*_*ain 3 c# wcf reference

假设您有一些定义为

[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);
}
Run Code Online (Sandbox Code Playgroud)

假设我正在使用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();
    }

}
Run Code Online (Sandbox Code Playgroud)

我得到的TrueTrueFalse因为我的结果是,该装置bars[0]bars[1]没有指向服务器上的同一个对象。

我做错什么了吗,还是不可能通过WCF共享引用?

Dan*_*ner 5

您必须通过指定显式告诉WCF保留引用

[DataContract(IsReference = true)]
Run Code Online (Sandbox Code Playgroud)

否则,在消息构造期间将丢失引用相等性。