C# WCF同一配置中的多个服务同一合同

C# WCF同一配置中的多个服务同一合同,c#,wcf,rest,C#,Wcf,Rest,我正在尝试承载同一合同的不同服务实现: 原因是需要一个虚拟实现来进行外部测试 我正在尝试在同一个WindowsService中托管这两个服务: private ServiceHost _host; private ServiceHost _dummy; protected override void OnStart(string[] args) { _host = new ServiceHost(typeof(Service));

我正在尝试承载同一合同的不同服务实现:

原因是需要一个虚拟实现来进行外部测试

我正在尝试在同一个WindowsService中托管这两个服务:

    private ServiceHost _host;
    private ServiceHost _dummy;
    protected override void OnStart(string[] args)
    {
        _host = new ServiceHost(typeof(Service));
        _host.Open();

 //trying to avoid the app.config beeing used - because its already been hoste by _host
        _dummy = new ServiceHost(typeof(TestDummyService));
        _dummy.Description.Endpoints.Clear();
        _dummy.AddServiceEndpoint(typeof(IService), 
                                   new WebHttpBinding(),
                                  @"<link>/Dummy.svc/");
        _dummy.ChannelDispatchers.Clear();
        _dummy.Open();
     }
privateServiceHost\u主机;
私有服务主机_虚拟;
启动时受保护的覆盖无效(字符串[]args)
{
_主机=新服务主机(类型(服务));
_host.Open();
//试图避免使用app.config,因为它已经被主机托管了
_dummy=新服务主机(typeof(TestDummyService));
_dummy.Description.Endpoints.Clear();
_dummy.AddServiceEndpoint(类型化(IService)),
新建WebHttpBinding(),
@“/Dummy.svc/”;
_dummy.ChannelDispatchers.Clear();
_dummy.Open();
}
这是配置文件:

  <system.serviceModel>
    <services>
      <service name="namespace.Service">
        <host>
          <baseAddresses>
            <add baseAddress="<link>/Service.svc"/>
          </baseAddresses>
        </host>
        <endpoint address="" 
                  binding="webHttpBinding" 
                  contract="namespace.IService" 
                  behaviorConfiguration="web" />

        <endpoint address="/mex" 
                  binding="mexHttpBinding" 
                  contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors >
        <behavior>
          <serviceMetadata httpGetEnabled="true"
                           httpGetUrl="<link>/Service.svc/About" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name ="web">
          <webHttp />         
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>

无法打开位于/Service.svc/About且具有合约“IHTTPGethelpageandMetadataContract”的ChannelDispatcher

感谢您的帮助

更新1 我的目标是在一个WindowsService中托管同一契约的两个不同实现(
IService


我还想在配置文件中配置它们。

因此我发现,即使testdummy服务是以编程方式添加的,它仍然获得了服务metadatabehavior

我的解决方案是不将dehavior设置为默认值-鉴于其名称:

app.config:

<service name="namespace.Service" behaviorConfiguration="someName">

//。。后来:

    <behavior name="someName">
      <serviceMetadata httpGetEnabled="true"
                       httpGetUrl="<link>/Service.svc/About" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>


代码的其余部分是相同的

您不能添加另一个端点并用不同的名称填写地址:

<endpoint address="/SecondService" 
              binding="webHttpBinding2" 
              contract="namespace.IService" 
               />


Url变成/Service.svc/SecondService

我想知道业务场景是什么。我想,客户端不应该知道实现,它只是服务的URL将指示(或路由)到实现

请澄清


参考此现有文件,并让 让我知道这是否有意义



上面的帖子暗示了这一实现,请参阅此了解部署详细信息。

hi-thnks了解反馈。不,不幸的是,我不能。因为端点不允许我决定使用什么实现。这在服务标签中指定:
链接将使其反之亦然。我只有一个合同,但该合同有多个实现。此外,该链接没有提供任何关于如何主持该死的事情的信息:)但感谢上面的反馈,只有1个合同和2个实施,我不知道为什么它没有帮助你。我已经编辑了答案并添加了一个链接。希望它有帮助…我会给你一个尝试,但链接不是我要找的。sry