其他分享
首页 > 其他分享> > 可以从客户端使用通用的DataContract?

可以从客户端使用通用的DataContract?

作者:互联网

我知道您在创建服务时可以创建一个通用的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的客户端,并将其作为具体对象传递给服务器?我在添加服务参考之后尝试了此操作,但效果并不是很好.因此,这让我更多地想知道是否有任何方法(即使这意味着不添加服务引用)来执行此操作?

解决方法:

最终,WCF将研究合同类别.如果是从WSDL / MEX生成的,则不会有此代码(因为这不是元数据中表示的方式)-但是,如果您的客户端具有上述代码,则请确保它可以正常工作.

如果您从客户端将库引用(即dll /项目引用)添加到DTO dll,并确保WCF启用了共享程序集,则它应该起作用.如果仍然不成功,那就作弊:使用服务引用只是为了获取配置数据.然后删除服务引用,但保留配置(否则,这些配置文件会很麻烦).然后,它应该从库中找到类型.

标签:datacontract,generics,wcf,c
来源: https://codeday.me/bug/20191208/2089459.html