使用WCF XML配置在单个主机内两次托管WCF服务

本文关键字:WCF 两次 服务 配置 XML 单个 使用 主机 | 更新日期: 2023-09-27 18:22:09

对于特殊的服务测试设置,我们需要使用不同的WCF XML配置为相同的服务类型创建多个WCF ServiceHost实例。

我想到了以下内容:

// App.config:
<services>
  <!-- does not work, name must be type, but can't be type to be unique... -->
  <service name="Service1">
    <endpoint ...>
    <host>
      ...
    </host>
  </service>
  <service name="Service2">
    ...
  </service>
</services>
// My Tests.cs:
var sh1 = new ServiceHost(typeof(Service));
var sh2 = new ServiceHost(typeof(Service));
// connect sh1 to "Service1" configuration and sh2 to "Service2" configuration

如何将ServiceHost实例与相应的配置元素正确连接?我尝试了以下方法:

sh1.Description.ConfigurationName = "Service1";

然而,这是行不通的。它仍然需要我将服务的name属性设置为服务的完全限定类型名称。但我不能,因为它必须是独一无二的。。。

如何使用WCF XML配置在单个应用程序中两次托管相同的服务类型

使用WCF XML配置在单个主机内两次托管WCF服务

服务名称必须完全限定。所以类似于:

<service name="MyNamespace.Service1">

应该起作用。

如何两次托管相同的服务类型(不同配置)

您可以为定义的每个服务定义多个<endpoint/>节点。每个端点都可以使用不同的绑定配置。

如何在一个应用程序中两次托管相同的服务类型使用WCF XML配置?

好吧,我明白你现在想做什么了。所以我认为使用XML配置是不可能的。原因是XML配置是基于约定的。该约定的一个前提条件是,只允许托管每种服务类型的单个实例,尽管每种服务都可以定义多个端点。

通过删除XML配置并在代码中执行它,可能可以实现您想要的操作,但可能仍有其他内置限制阻止您执行此操作。

您对服务进行子类化的想法可能是最好的方法。

一个可能的解决方法是从原始Service派生一个伪Service2,并托管两种不同的类型。。。但这不是我真正想做的。