我知道在创建服务时,您可以创建一个通用的DataContract:
[DataContract(Name = "Get{0}Request")
public sealed class GetItemRequest<T>
where T : class, new() { ... }
[DataContract(Name = "Get{0}Response")
public sealed class GetItemResponse<T>
where T : class, new() { ... }
[ServiceContract]
public void MyService : IMyService
{
[OperationContract]
GetItemResponse<Foo> GetItem(GetItemRequest<Foo> request);
}
这为我的WSDL生成GetFooRequest
和GetFooResponse
定义。现在,我很好奇的是,是否可以向另一个方向发展?
是否可以创建一个使用Generic DataContracts的客户端并将其作为具体对象传递给服务器?我在添加服务引用之后尝试了这个,但它确实没有那么好用。所以我更想知道是否有任何方法(即使这意味着没有添加服务参考)来做到这一点?
答案 0 :(得分:3)
最终,WCF将考虑合同类。如果它是从WSDL / MEX生成的,那么就不会有这个(因为这不是它在元数据中的表达方式) - 但是如果你的客户端有上面的代码,那么确定它应该可以正常工作。
如果从客户端向DTO dll添加库引用(即dll /项目引用),并确保WCF启用了共享程序集,则它应该可以正常工作。如果它仍然是baulks,那么作弊:使用服务引用只是为了获取配置数据。然后删除服务引用但保留配置(否则这些配置文件会很痛苦)。然后它应从库中找到类型。