Di seguito è riportato il frammento di file app.config del servizio Windows host.Hosting di più servizi WCF su una singola porta TCP in un unico servizio 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>
Ci sono 3 servizi WCF configurati per utilizzare TCP endpoint con la porta 8001. In servizio di Windows che sto usando qui di seguito il codice per registrare Servizio host
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);
}
}
Per ogni oggetto ServiceHost sto chiamando la funzione RegisterServiceHost , il codice di questa funzione è il seguente
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();
}
Sopra il codice funziona correttamente senza alcun problema. La mia domanda è che tutti i servizi condividano la stessa porta 8001. Come tutti i servizi in grado di condividere la stessa porta. Anche il servizio di condivisione porta Net.TCP non è abilitato sulla macchina. Un'altra domanda è che causerà un impatto sulle prestazioni nella condivisione della stessa porta. Se fornisco una porta unica come 8001,8002, 8003 per ciascun servizio, allora quali sono i vantaggi.