是否可以在 IIS 生产环境中向 .NET 应用程序添加 WCF Web 服务引用

本文关键字:添加 应用程序 WCF Web 引用 服务 NET IIS 生产环境 是否 | 更新日期: 2023-09-27 18:35:05

我们有一个用.NET 3.5开发的ERP应用程序。

最近,我开发了一个 WCF 服务来公开从业务客户端的数据库服务器检索的数据。

现在,我已经在本地使用者项目中添加了一个服务引用并进行了测试。

要将此应用程序放入生产环境中,我们必须每次都编译DLL,然后在实时发布。

我喜欢避免整个DLL编译过程,我必须依靠我的开发团队来获取代码和编译。(此问题是由于不使用 TFS 或 VSS 来处理单个解决方案文件)

所以我想知道是否可以将服务引用和类文件添加到 IIS 根目录的生产环境中的项目,而无需重新编译消费者程序集。

是否可以在 IIS 生产环境中向 .NET 应用程序添加 WCF Web 服务引用

很难知道你想在这里避免什么,但你希望能够在不重新构建/重新部署该应用程序的情况下向现有应用程序添加代码。这称为热插拔。

但是,服务引用是代码。因此,需要将它们与使用代码一起编译到一个或多个程序集中。这就是使用服务引用使用 Web 服务的本质。

可以使用反射在运行时加载代码,这将允许将旧代码与新 dll 热交换,但仍需要将新服务引用编译到新 DLL 中。

解决此问题

的更好方法是根本不使用服务引用,而是使用 ChannelFactory 直接调用服务。这允许您调用服务,而无需使用服务元数据来生成服务引用。

现在,WCF 遵循称为数据协定等效性的东西,粗略翻译为服务将遵循传递的类型,前提是传递的类型看起来与服务作为参数公开的类型相同。

这意味着您的开发团队可以根据服务中定义的类型创建自己的等效类型,然后调用传递(或接收)这些类型的服务,就好像它们是本机服务类型一样。

但是,这并不能消除在某个时候需要编译所有这些内容的要求。它所做的是消除消费者和服务之间的耦合。

您能否明确说明哪些场景进行热插拔/ 渠道工厂是有益的使用

虽然这不会直接满足您的要求,

热插拔对于在运行时更改行为应用程序很有用。在以下情况下,这一点很重要:

  1. 您的应用程序是一个黑匣子,
  2. 您需要 100% 的可用性,或者
  3. 您的部署过程非常繁琐,以至于部署新版本的成本令人望而却步。

ChannelFactory 在许多方面都是有益的,但基本上它消除了生成服务引用的要求,虽然最终是确定性的,但可能是不可预测的,并且通常会增加复杂性。

ChannelFactory 还使您能够利用数据协定等效性,从而进一步将使用者与服务分离。例如,如果服务协定更改为向类型添加新字段,则使用者通常可以继续调用服务而不进行更改。