4

我试图通过解决一些痛点来帮助一个项目团队简化他们的工作。

他们在代码中的痛点之一是,他们通过服务引用(代理)使用 WCF 服务 [即 Visua Studio 2008 中的“添加服务引用”。这会产生很多问题,包括部署开销,Souce Control 获取最新更新代理等相关问题

为了处理这些和其他与服务引用相关的问题,我正在寻找一个很好的替代服务引用的方法。我已经看过ChannelFactory并且我最倾向于那个。这似乎是一个很好的解决方案。

然而问题是,有很多代码像这样使用这些服务

BatchClient client = new BatchClient(); //Batchclient is  a proxy
batchData = client.GetBatchData(batchNumber)

因此,如果我使用 ChannelFactory 路径,我将需要在整个项目中更新所有代码片段,如上述。由于更改量很大,团队对此选项不太满意。

我的问题是,有没有其他更好的替代“添加服务参考”可以用最少的代码更改?或者有什么方法可以在不影响现有代码的情况下使用 ChannelFactory?

4

2 回答 2

1

首先,我相信您可以通过创建自己的代理BatchClient来实例化通道,从而轻松解决“必须替换大量代码”的问题。它的工作方式与当前使用的生成代码基本相同。

然而,在转向无代理、合同共享模型之前,我真的会考虑你为什么要搬家。我不再使用生成的代码选项,主要是因为熟悉 WCF 并没有必要。但是,我相信“添加服务引用...”模式对于 WCF 初学者来说更容易,而且它真的完全不会花费您。

问自己以下问题(或者更确切地说,向我解释):

  • 部署开销是多少?我没有看到。您生成的代理将在部署后工作。您在配置文件中更改服务地址和行为。
  • 源代码管理问题/获取最新信息?这也不应该是一个问题。只需获取最新的,并使用最新的。如果服务发生了变化——并且您想利用这些变化——如果您使用共享合同文件并实例化您自己的频道,您将需要获取最新版本的服务合同。
  • 更新代理?不熟悉代理的工作原理,它是什么以及它做了什么可能会导致这种情况,但是没有代理也不会更容易。真的,您只需右键单击选择“更新服务参考”,对吗?

您正在考虑的模型简洁,并且可能具有更大的灵活性,但它并不简单。如果您的团队在维护生成的服务代理时遇到问题,那么我会解决这些问题,而不是通过删除代理将它们扔到 WCF 的深处。

于 2011-04-26T08:45:13.717 回答
0

有一些文章建议使用类 ClientBase 来实现相同的目的。

见一)https://aturcarablog.wordpress.com/2016/08/07/alternative-way-to-consume-wcf-service/

b) http://www.codeproject.com/Articles/412363/How-to-Use-a-WCF-Service-without-Adding-a-Service

因此,您的代码可以重写为:

using (var batchClient = new ServiceWrapper<IYourWcfService>("YourEndpointConfigurationName"))
{
    batchData = batchClient.Proxy.GetBatchData(batchNumber);
}
于 2016-08-10T13:07:30.300 回答