【问题标题】:Automating publishing WCF services and updating its references自动发布 WCF 服务并更新其引用
【发布时间】:2014-03-10 14:29:14
【问题描述】:

即使这不是一个关键问题,由于一些用户错误,我遇到了一些严重的故障,所以我需要找到解决这个问题的方法。

我有一个基于分层服务的应用程序。在我的架构中,最少的层数是 2。因此,当我进行需要在客户端上更新参考的更改时,我需要发布第一层,然后在第二层上更新第一层的参考,然后在客户端应用程序上第二层的更新参考之后发布第二层。如果这就是我所要做的,我相信我可以生存,但我有 5 种不同的服务,每个人都有 implementationproduction 环境要发布。我很容易对这些步骤感到困惑。

当我进行快速研究时,我发现built script 之类的东西。但由于在我的情况下也有更新服务参考操作,我不确定它是否会起作用。因此,我要求提供一种工具或方法来以某些特定顺序发布服务和更新引用。

【问题讨论】:

  • 您使用什么产品进行源代码控制?
  • 我正在将 Visual Studio 与 Team Foundation Server 一起使用
  • 不是解决方案,而是提示:不要更改生产中使用的方法的参数。如果您担心以后可能需要扩展方法,请使用对象作为参数,因为如果您不需要它们,它们可以轻松扩展而无需更新。如果您仍然需要更改方法的参数/参数,请创建一个具有相同名称的新方法和一个表示有新版本的数字。例如:MyMethod(int Id) --> MyMethod2(int Id, DataContractType queryObject)。这在 Web 服务中很常见。
  • 感谢您的建议 :)

标签: c# wcf publish auto-update


【解决方案1】:

我们在更新十几个服务的服务引用时遇到了同样的问题。

如果您的服务和客户端项目可以共享一个公共服务合同 DLL(具有对具有服务类型的项目的项目引用),您可以使用通道工厂来创建客户端。在这种情况下,您根本不需要服务参考。

BasicHttpBinding myBinding = new BasicHttpBinding();
EndpointAddress myEndpoint = new EndpointAddress("http://localhost/MathService/Ep1");
ChannelFactory<IMath> myChannelFactory = new ChannelFactory<IMath>(myBinding, myEndpoint);
IMath wcfClient1 = myChannelFactory.CreateChannel();
double s = wcfClient1.Add(3, 39);
((IClientChannel)wcfClient1).Close();

你可以在http://philmunro.wordpress.com/2012/02/15/creating-a-wcf-service-proxy-with-channelfactory/阅读更多内容

【讨论】:

  • 谢谢你的回答,我真的很喜欢。但是有一件事让我心烦意乱,那就是如果我的客户端应用程序被逆向工程,那么我的服务 dll 可以被解析,我宝贵的业务逻辑就会暴露出来。我对么?但是,我只能在终端客户端上使用服务引用绕过这个问题,在服务层上我可以使用你的方法。对我来说足够公平:) 再次感谢。
  • 将服务类型和接口保存在单独的项目中,例如 serviceName.Common.cproj。在 serviceName.Core.cproj 中实现您的业务逻辑,在 serviceName.Client.cproj 中实现您的客户端逻辑。这些项目将具有对 serviceName.Common.cproj 的项目引用,因此您的客户端应用程序不会通过您的逻辑引用服务 dll
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多