Poniżej znajduje się mój fragment pliku app.config usługi hosta systemu Windows.Obsługa wielu usług WCF na jednym porcie TCP w jednej usłudze systemu Windows
<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 korzystania z portu TCP końcowy 8001. W usługi windows używam poniżej kodu Rejestracja Serwis gospodarze
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 Wołam funkcję RegisterServiceHost , kod tej funkcji jest poniżej:
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 żadnych problemów. Moje pytanie jest takie, że wszystkie usługi dzielą ten sam port 8001. Jak wszystkie usługi mogą współdzielić ten sam port. Nawet usługa udostępniania portów Net.TCP nie jest włączona na komputerze. Moje inne pytanie jest takie, że spowoduje to wpływ wydajności na udostępnianie tego samego portu. JEŚLI daję unikalny port, jak 8001,8002, 8003 dla każdej usługi, to co jest tego zaletą.