每份合约都必须在一个ServiceHost中托管?

时间:2015-12-14 11:37:01

标签: wcf wcf-binding

我想在我的服务器中公开两个合同。该服务的应用程序配置文件是:

<services>
      <service name="Interface1Service">
        <endpoint address="" binding ="customBinding" contract="Interface1"
                  bindingName="binding_Interface1" bindingConfiguration="CustomBinding_Interface1" name="epInterface1">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8733/Interface1/" />
          </baseAddresses>
        </host>
      </service>

      <service name="Interface2Service">
        <endpoint address="" binding ="customBinding" contract="Interface2"
                  bindingName="binding_Interface2" bindingConfiguration="CustomBinding_Interface1"
                  name="epInterface2Service">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8733/Interface2/" />
          </baseAddresses>
        </host>
      </service>
    </services>

在我的控制台应用程序中托管我的服务:

ServiceHost miHost = new ServiceHost(typeof(Interface1Service));

    miHost.Open();

    ServiceHost miHost2 = new ServiceHost(typeof(Interface2Service));
    miHost2.Open();

    Console.ReadKey();

    miHost.Close();
    miHost2.Close();

我怀疑这是否是暴露这两种服务的正确方法,或者有任何方法只使用一个serviceHost来做到这一点。

因为我已经看到很多相关操作的合同很常见,例如一个用于修改产品的界面,另一个用于修改人员,其他用于订单等等。

非常感谢你。

1 个答案:

答案 0 :(得分:2)

  

..是否只能使用一个serviceHost来做到这一点?

当然可以在单个主机容器中公开多个服务合同。您只需创建一个实现所有服务接口的类:

public class MyService : Interface1, Interface2
{
    // implement your operations here...
}

// then create service host:
var miHost = new ServiceHost(typeof(MyService)); 
  

我怀疑这是否是揭露两种服务的正确方法..

即使WCF允许您这样做,但 是否这样做是另一个问题。

如果服务公开的操作被认为不同,以至于它们被分成不同的服务合同,那么这是一个明确的信号,即这些服务实际上是不同的服务,因此应该这样对待。

对所有这些不同的服务有一个共同的具体实现引入了耦合,并且可能不应该这样做。