以下是我的应用程序配置文件中关于主机 Windows 服务的片段:
对于每个ServiceHost对象,我都调用RegisterServiceHost函数,该函数的代码如下:
上述代码没有任何问题,运行正确。我的问题是所有服务都在共享同一个8001端口,它们是如何实现共享同一端口的?即使该机器上没有启用Net.TCP端口共享服务。另外我想问的是,这样做会对性能造成影响吗?如果我为每个服务分别指定唯一的端口(例如8001、8002、8003),那么这样做有什么好处?
<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>
有3个WCF服务配置为使用TCP端点,端口号为8001。 在Windows服务中,我使用以下代码注册服务主机:
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);
}
}
对于每个ServiceHost对象,我都调用RegisterServiceHost函数,该函数的代码如下:
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端口共享服务。另外我想问的是,这样做会对性能造成影响吗?如果我为每个服务分别指定唯一的端口(例如8001、8002、8003),那么这样做有什么好处?