gpt4 book ai didi

wcf - 在一个 Windows 服务中的单个 TCP 端口上托管多个 WCF 服务

转载 作者:行者123 更新时间:2023-12-04 11:54:36 24 4
gpt4 key购买 nike

下面是我的主机 Windows 服务的 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>

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

对于我调用 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 端口共享服务。
我的另一个问题是共享同一个端口会不会对性能造成任何影响。如果我为每个服务提供像 8001,8002 ,8003 这样的唯一端口,那么它的优势是什么。

最佳答案

它们可以共享同一个端口,因为它们都有不同的路径。显然一切正常,所以 WCF 主机足够聪明,可以弄清楚如何让它们在端口 8001 上共享相同的监听套接字。然后它可以区分请求,因为请求将包含作为 WCF 一部分的服务名称端点配置。

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

关于wcf - 在一个 Windows 服务中的单个 TCP 端口上托管多个 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15662231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com