Hostowanie wielu usług WCF na pojedynczym porcie TCP w jednej usłudze Windows

Poniżej znajduje się mój fragment pliku app.config usługi Windows Host.

<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>

Istnieją 3 usługi wcf skonfigurowane do używania punktu końcowego TCP z portem 8001. W usłudze Windows używam poniższego kodu do zarejestrowania hostów usług

private static ServiceHost[] Hosts = null;

public static void Start()
{     
    try
    {
        while (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
        {
            System.Threading.Thread.Sleep(1000);
        }
        BaseLog.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        Hosts = new ServiceHost[] 
            {
                new ServiceHost(typeof(MainService)), 
                new ServiceHost(typeof(MainMasterPageService)),
                new ServiceHost(typeof(SMSService)) 
            };

        foreach (ServiceHost host in Hosts)
        {
            RegisterServiceHost(host);
        }

        _log.Info("All Hosts Open");
    }
    catch(Exception e)
    {
        _log.Error( "MainServiceHost", e);
    }
}

Dla każdego obiektu ServiceHost nazywam funkcję RegisterServiceHost, kod tej funkcji jest następujący

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();
}

Powyższy kod działa poprawnie bez żadnego problemu. Moje pytanie brzmi, że wszystkie usługi dzielą ten sam port 8001. Jak wszystkie usługi mogą współdzielić ten sam port. Nawet usługa udostępniania portu Net.TCP nie jest włączona na komputerze. Moje inne pytanie brzmi, czy spowoduje to wpływ na wydajność w udostępnianiu tego samego portu. JEŚLI podam unikalny port, taki jak 8001,8002, 8003 dla każdej usługi, to jaka jest jego zaleta.

questionAnswers(1)

yourAnswerToTheQuestion