使用WCF XML配置在单个主机中主机WCF服务两次

时间:2015-11-17 10:29:20

标签: c# wcf

对于特殊服务测试设置,我们需要使用不同的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配置在单个应用程序中两次托管相同的服务类型?

2 个答案:

答案 0 :(得分:2)

服务名称必须完全合格。如下所示:

<service name="MyNamespace.Service1">

应该有用。

  

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

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

  

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

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

通过删除XML配置和doing it in code可能会做你想做的事情,但是可能还有一些其他的内置限制来阻止你这样做。

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

答案 1 :(得分:1)

一种可行的解决方法是从原始Service2派生虚拟Service并托管两种不同的类型......但这并不是我想要做的事情。