在多个Web应用程序工作进程中自行托管WCF

时间:2016-10-30 17:42:44

标签: c# asp.net .net wcf load-balancing

在网络应用程序中,我运行了一个简单的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,我可以调用HelloWorldServicehttp://localhost:8080/hello中定义的任何方法。我已经在IIS发布了它,它也有效,一切正常。

当我将Maximum Worker Processes值增加到2或超过1时,就会出现问题。

关键是每个工作进程都是一个想要获取端口8080的独立进程,但操作系统不允许多个进程获取它。

似乎问题将通过处理异常来解决,因此只有一个进程将获得端口。但事实并非如此!当具有端口的进程发生再循环时,无法保证立即执行新的工作进程。

注意:任何分隔主机和我的Web应用程序的解决方案都是不可接受的,因为服务中的所有业务都将由我的Web应用程序注入和控制。

我有个主意。我会在每个进程中使用不同的端口并运行它们。此外,我已阅读Application Request Routing以使用负载平衡功能将一个特定端口分散到由工作进程获取的多个不同端口。

enter image description here

请欣赏我或给我一个解决方案。

1 个答案:

答案 0 :(得分:0)

您可以使用端口池。在global.asax上选择一个未使用的端口。

Web应用程序可能不是托管WCF服务的好选择。