c# - WCF 能否通过网络保持引用相等性?

标签 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);
}

假设我在客户端和服务器之间通过共享数据契约 DLL 使用 WCF 到 WCF,如果我执行类似以下的操作

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();
    }

}

我得到 TrueTrueFalse 作为我的结果,这意味着 bars[0]bars[1] 没有指向服务器上的同一个对象。

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

最佳答案

你必须 explicitly tell WCF to preserve references通过指定

[DataContract(IsReference = true)]

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

关于c# - WCF 能否通过网络保持引用相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21639216/

相关文章:

c# - 如何在WCF服务中添加OWIN Startup

java - 关于 Java 垃圾收集器、空值和内存泄漏的问题

c# - 需要 CS1001 网站标识符

entity-framework - 集成安全如何工作

c# - WCF 服务是否公开属性?

struct - 我可以限制结构的生命周期污染吗?

C# 属性作为引用

c# - 使用 Task.Start 触发任务时卡在 Task.WaitAll(tasks.ToArray()) 处

c# - 保护 WinForms 应用程序建议

c# - 捕获所有不捕获静态文件的路由