是否可以从客户端使用通用DataContract?

时间:2011-07-13 20:48:36

标签: c# generics datacontract wcf

我知道在创建服务时,您可以创建一个通用的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生成GetFooRequestGetFooResponse定义。现在,我很好奇的是,是否可以向另一个方向发展?

是否可以创建一个使用Generic DataContracts的客户端并将其作为具体对象传递给服务器?我在添加服务引用之后尝试了这个,但它确实没有那么好用。所以我更想知道是否有任何方法(即使这意味着没有添加服务参考)来做到这一点?

1 个答案:

答案 0 :(得分:3)

最终,WCF将考虑合同类。如果它是从WSDL / MEX生成的,那么就不会有这个(因为这不是它在元数据中的表达方式) - 但是如果你的客户端有上面的代码,那么确定它应该可以正常工作。

如果从客户端向DTO dll添加引用(即dll /项目引用),并确保WCF启用了共享程序集,则它应该可以正常工作。如果它仍然是baulks,那么作弊:使用服务引用只是为了获取配置数据。然后删除服务引用但保留配置(否则这些配置文件会很痛苦)。然后它从库中找到类型。