WCF - 如何以更面向对象的方式定义服务?

标签 wcf oop datacontract servicecontract

通过 WCF 访问远程对象模型的最佳方式是什么?

我有一个带有面向对象模型的系统层 (A),并且希望从另一层 (B) 访问该模型

所需的对象应由 B 按需加载。举个例子,假设我有类 C1 和 C2,其中 C1 持有 C2 的列表。仅当访问该列表时才应加载该列表。

由于数据合约无法保存操作合约,因此我将使用具有两种方法“getC1”和“getListC2(C1)”的一个服务合约来实现这一点

但是,我真正想要的是访问面向对象的模型,例如在 C1 上调用函数:C1.getListC2

如何以更加面向对象的方式使用 WCF?

最佳答案

解决此问题的一种方法是使用您自己的延迟加载(和其他)业务逻辑来包装代理对象。换句话说,假设您有一个名为 Order 的 WCF 代理和一个服务方法 GetOrderLineItems()。

public class Order
{
    private Proxies.Order _order;
    private List<OrderLineItem> _lineItems;

    public string Name 
    {
        get { return _order.Name; }
    }

    public List<OrderLineItem> LineItems
    { 
        if (_lineItems == null)
        {
             _lineItems = //Make the service call to get these objects
        }
    }
}

另一种综合方法是向代理对象添加扩展方法:

public static List<Proxies.OrderLineItem> GetLineItems(this Proxies.Order order)
{
     //Make the service call to get the line items
}

这将允许你做:

var lineItems = order.GetLineItems();

关于WCF - 如何以更面向对象的方式定义服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873337/

相关文章:

c# - 我可以在 WCF 命名管道上传递 COM 接口(interface)吗?

c# - WCF 服务向客户端发送数据

java - OOP:有没有简单的接口(interface)提取和不那么冗长的自动转发的习惯用法?

c++ - 派生类中虚拟方法的默认实现

c# - 套接字连接已中止 - CommunicationException

wcf - 如何使用简单注入(inject)器将依赖项注入(inject) WCF 属性

javascript - 如何覆盖面向对象的 Javascript 中的方法?

c# - DataContract/JsonSerializer '@' 附加到变量名称

c# - 没有 equals 方法 WCF 的代理类

c# - DataContract + 多维数组——有什么解决方案吗?