【发布时间】:2016-10-30 17:42:44
【问题描述】:
在一个网络应用程序中,我运行一个简单的wcf host:
Uri baseAddress = new Uri("http://localhost:8080/hello");
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.Open();
}
我写在Global.asax/Start。因此,它在我的 Web 应用程序的开头打开并侦听端口 8080,我可以调用在 HelloWorldService 到 http://localhost:8080/hello 中定义的任何方法。我已经在IIS 上发布了它,它也可以正常工作,一切正常。
当我将Maximum Worker Processes 值增加到2 或大于1 时,就会出现问题。
关键是每个工作进程都是一个独立的进程,它想要获取端口 8080,但操作系统不允许多个进程获取它。
似乎问题可以通过处理异常来解决,所以只有一个进程会获得端口。但这不是真的!当拥有端口的进程发生回收时,不能保证立即执行新的工作进程。
注意:任何分离主机和我的Web应用程序的解决方案都是不可接受的,因为服务内部的所有业务都将由我的Web应用程序注入和控制。
我有个主意。我将在每个进程中使用不同的端口并运行它们。我还阅读了Application Request Routing 以使用负载平衡功能将一个特定端口分散到工作进程获得的多个不同端口。
请感谢我或给我一个解决方案。
【问题讨论】:
标签: c# asp.net .net wcf load-balancing