0

我有以下(简化的)场景。

有一个 WCF 服务 (MyService),它公开了一些实体 MyEntityDTO。在客户端,我创建了一个接口 IMyServiceClient,它被传递给我的客户端组件,因此它们可以从任何底层实现请求 MyEntityDTO。而且现在我可以使用一些 MockedMyServiceClient 运行客户端单元测试:IMyServiceClient。目前看来还不错。

现在我创建了一个实际的 MyRealWCFServiceClient :IMyServiceClient,它基本上只是包装了由 Visual Studio 创建的 WCF 服务引用。

一个问题是 WCF 服务引用返回完全另一种 MyEntityDTO,因此我必须将它从服务引用实体类型映射到从 IMyServiceClient 返回的 MyEntityDTO 类型。我可以为此使用 AutoMapper。

但最大的问题来了。假设,我想在我的项目的其他一些应用程序中重用我的 MyRealWCFServiceClient。如果这些应用程序中的每一个都有自己的 WCF 服务引用和它自己的 DTO 类型,我将不得不以某种方式传递当前服务引用的所有 DTO 类型,并使用一些棘手的反射配置 AutoMapper 以将我的通用类型注入其中。真是一团糟...

但是我可以将我的常见 WCF 引用与他们在一些公共库中包装的 MyRealWCFServiceClients 一起收集,因此所有 MyRealWCFServiceClients 只使用那些已知的常见 WCF 引用。

我想知道,为服务引用创建一个公共库是一种好习惯吗?有没有更好的解决方案?

4

1 回答 1

1

如果您创建一个通用客户端,那么我会将其创建为从服务端发送的可分发程序集。换句话说,创建一个通用客户端,然后分发。不要从客户端构建代理。

至于生成不同的代理(对于DTO),如果您可以引用包含DTO实现的合同程序集。然后使用VS构建代理,代理生成器足够聪明,可以使用引用的原始DataContracts(而不是生成新的代理类)。

所以,我认为你有两个选择。一、创建一个普通客户的项目,然后分发。和/或二,在生成客户端之前引用合约组装目录。

希望这可以帮助。

于 2012-06-06T10:39:05.290 回答