【问题标题】:WCF service + passing and receiving same object to/from service & clientWCF服务+向/从服务和客户端传递和接收相同的对象
【发布时间】:2014-05-28 14:52:30
【问题描述】:

请在下面的案例中,我需要 WCF 的最佳实践,

我需要将对象实例发送给 WCF 服务,WCF 服务处理并更新同一个对象并发送回客户端。

那么在最佳实践中,我是否需要维护 2 个对象实例?或者我可以使用相同的实例并更新并发回。请指教。

请参阅下面的代码了解我目前的写作方式。请帮忙。

[OperationContract]   
 Customer DoProcess(Customer customer);

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    由于您不想保留发送的对象,因此无需维护两个对象。始终建议不要创建多个引用或对象。

    如果是对象,您将有一个单独的副本,这意味着更多的内存,而在引用变量中,您还将浪费 4 到 8 个字节 + CPU 开销。

    根据内存管理的原则,我建议你更新相同并返回。

    【讨论】:

    • 感谢您的建议。
    • 唯一我想知道的是,如果我在服务调用后在客户端使用客户实例,我会得到更新的客户实例吗?我试过了,它不起作用:-(
    • 您需要退货; WCF 是一个基于消息的系统 - 您传递序列化(文本/xml)消息。没有可以传递的“对象引用”。因此,您的方法应该返回......换句话说,您的客户端代码将是:customer = webservice.DoSomething(customer);
    【解决方案2】:

    考虑以下场景: 客户端调用 WCF 服务函数并将客户作为参数传递。

    Customer c = new Customer();
    WCFProxy.DoProcess(c);
    

    现在对象将被序列化并发送到 wcf 服务。 该服务现在将执行 DoProcess 函数,如下所示;

    Customer DoProcess(Customer customer){
    customer.name = 'abc';
    return customer;
    }
    

    这不会更新客户端传递的客户。它将返回一个新客户,该客户将被序列化并传递给客户端。

    因此,在客户端上,您可以将您的客户实例设置为返回的客户,如下所示:

    c = WCFProxy.DoProcess(c);
    

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      相关资源
      最近更新 更多