在一个windows服务的单个TCP端口上承载多个WCF服务

在一个windows服务的单个TCP端口上承载多个WCF服务,wcf,Wcf,下面是主机windows服务的my app.config文件片段 <services> <service name="Share.Services.MainService"> <endpoint address="net.tcp://localhost:8001/MainService" behaviorConfiguration="netTcpBehavior" binding="netTcpBinding" contract="Sha

下面是主机windows服务的my app.config文件片段

<services>
      <service name="Share.Services.MainService">
        <endpoint address="net.tcp://localhost:8001/MainService" behaviorConfiguration="netTcpBehavior" binding="netTcpBinding" contract="Share.Services.IClaimService" />
      </service>
      <service name="Share.Services.MainMasterPageService">
        <endpoint address="net.tcp://localhost:8001/MainMasterPageService" behaviorConfiguration="netTcpBehavior" binding="netTcpBinding" contract="Share.Services.IMainMasterpageService" />
      </service>
      <service name="Share.Services.SMSService">
        <endpoint address="net.tcp://localhost:8001/SMSService" behaviorConfiguration="netTcpBehavior" binding="netTcpBinding" contract="Share.ServiceContracts.Messaging.ISMSService" />
      </service>
    </services>
对于我调用RegisterServiceHost函数的每个ServiceHost对象,该函数的代码如下

public static void RegisterServiceHost(ServiceHost host)
{
    var ops = (from e in host.Description.Endpoints
            from o in e.Contract.Operations
            select o).ToList();

    ops.ForEach(
        operation => operation.Behaviors.Add(new MainContextOperationBehavior())
            );

    host.Open();
}
以上代码工作正常,没有任何问题。我的问题是所有服务共享同一端口8001。所有服务如何能够共享同一端口。计算机上甚至未启用Net.TCP端口共享服务。
我的另一个问题是,共享同一个端口是否会对性能造成影响。如果我为每项服务提供像80018002、8003这样的唯一端口,那么它的优势是什么

它们可以共享同一个端口,因为它们都有不同的路径。很明显,这一切都是可行的,因此WCF主机足够智能,能够弄清楚如何让它们共享端口8001上的同一个侦听套接字。然后,它可以区分请求,因为请求将包括作为WCF端点配置一部分的服务名称


我预计这不会导致任何性能问题,但这完全取决于WCF服务主机的工作方式。

什么是MainContextOperationBehavior..您能展示一下吗
public static void RegisterServiceHost(ServiceHost host)
{
    var ops = (from e in host.Description.Endpoints
            from o in e.Contract.Operations
            select o).ToList();

    ops.ForEach(
        operation => operation.Behaviors.Add(new MainContextOperationBehavior())
            );

    host.Open();
}