图片,如果您愿意,可以使用以下方案:
Web Service有一个方法:
public BusinessObject GetBusinessObject()
{
BusinessObject result = new BusinessObject;
result.Name = "MyBusinessObject";
return result;
}
此方法由WinClient调用。
当我添加对WebService的引用时,将创建一个代理类。因此,如果我从WinClient访问BusinessObject,就像这样:
BusinessObject bObj = service.GetBusinessObject();
然后bObj与BusinessObject.dll中的对象不同,但实际上是代理。
这里有一个解决方法 - http://ryanfarley.com/blog/archive/2004/05/26/737.aspx
我的问题 - 这是一个好主意吗?或者,从服务返回的对象是否应该被视为简单的DTO?因此,如果我们想要逻辑,那么我们应该将值复制到REAL businessObject中。但是这样做的性能如何呢?我应该担心吗?
欢迎任何反馈,谢谢。
答案 0 :(得分:2)
是的,总是使用DTO或类似的东西。
与数据即将遍历的网络性能相比,在内存中复制数据的性能可能微不足道。
答案 1 :(得分:2)
这取决于服务的“纯度”是否重要。如果 only 客户端将成为你的exe,那么我就不会感到压力;然后,您可以在客户端获得“智能”(如果您看到我的意思)对象(例如,实现IDataErrorInfo
进行验证),而不需要任何代码重复。
但是如果你需要支持ad-hoc客户端,你应该坚持使用基本的DTO(代理对象)。
请注意,如果您想要使用此路由(程序集共享),则可以在WCF中执行此操作而不进行任何更改; svcutil
和IDE提供了从现有程序集中重用类型的选项,但实际上您甚至不需要它(您可以直接访问通道)。您所需要的只是app.config中正确的配置数据,因此它知道在哪里找到该服务。