C# 侦听多个端口的WCF服务

C# 侦听多个端口的WCF服务,c#,web-services,wcf,C#,Web Services,Wcf,我需要在一台服务器上安装WCF服务,但由于运行客户端的机器存在各种问题,我需要侦听多个端口。我不清楚这是否可以通过一个ServiceHost和一个类来实现:一个类是从具有两个端点的CDF ServiceBase派生的,或者我是否需要两个具有单个端点的CDF ServiceBase。以下是相关文件中的相关代码: Program.cs static class Program { static void Main() { ServiceBase[] ServicesT

我需要在一台服务器上安装WCF服务,但由于运行客户端的机器存在各种问题,我需要侦听多个端口。我不清楚这是否可以通过一个ServiceHost和一个类来实现:一个类是从具有两个端点的CDF ServiceBase派生的,或者我是否需要两个具有单个端点的CDF ServiceBase。以下是相关文件中的相关代码:

Program.cs

static class Program
{
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new Service1()
        };
        ServiceBase.Run(ServicesToRun);
    }
}
服务1.cs

public partial class Service1 : ServiceBase
{
    private wcfServer _server;
    ServiceHost serviceHost;

    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(String[] args)
    {
        _server = new wcfServer();
        serviceHost = new ServiceHost(_server);
        serviceHost.Open();
    }

    protected override void OnStop()
    {
        if (serviceHost != null)
            serviceHost.Close();
    }
}
wcfServer.cs

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
    ConcurrencyMode=ConcurrencyMode.Multiple)]
public class wcfServer : IwcfServer { /* ... */ }
app.config

<services>
    <service name="MyService.wcfServer">
        <endpoint address=""
            bindingConfiguration="BigDataBinding"
            binding="basicHttpBinding"
            contract="DataBackups.IwcfServer">
            <identity>
                <dns value="localhost" />
            </identity>
        </endpoint>

        <endpoint address="mex"
            binding="mexHttpBinding"
            contract="IMetadataExchange" />

        <host>
            <baseAddresses>
                <add baseAddress="http://localhost/DataBackups/wcfServer/" />
            </baseAddresses>
        </host>
    </service>
</services>
</system.serviceModel>
我应该注意到

当前解决此问题的方法是修改安装程序,使我们能够在服务器上安装两次服务。 该服务的目的是处理多个并发请求,这些请求在某种程度上会在相关情况下传输大数据。 有人能举例说明如何做到这一点吗

此外,我不理解app.config中的配置与以编程方式创建的CDF ServiceBase实例之间的关系。在当前的设置中,app.config中只有一个Service1实例和一个配置,所以我想它们会排成一行。但是,如果我需要多个Service1实例,该怎么办?如何选择正在配置的服务?

您的WCF服务在侦听多个端口时应该没有问题。您只需展开app.config文件的baseAddress部分,如下所示:

<baseAddresses>
  <add baseAddress="http://localhost:80/DataBackups/wcfServer/" />
  <add baseAddress="http://localhost:8732/DataBackups/wcfServer/" />
</baseAddresses>

ServiceBase是表示Windows服务功能的基类。这种服务与WCF所称的服务完全无关——这是一种不幸的过载情况。在正常情况下,一个可执行文件中只实现一个服务,因此只有一个ServiceBase派生类。然后,此服务可以自由创建多个ServiceHost实例和/或为WCF服务托管多个端点。已同意。我只有一个从ServiceBase Service1派生的类,我想从多个端口(特别是80和默认的8732)访问它。这是否意味着我有多个ServiceHosts和/或Service1和/或endpoints正是我的问题。为什么不在防火墙上设置一个端口转发呢。将外部端口映射到一个内部端口?这是一种更简单、更可配置的方式。经过更多的测试,证明端口转发工作正常!端口转发无法工作的机器出现了导致问题的其他网络问题。和以前一样,我将不回答这个问题,因为如果能以编程的方式解决这个问题会很好,但这不起作用。我还尝试将这些url添加到两个不同的端点地址=字段中。我也尝试过基本地址的每一个其他组合=http://localhost 端点地址字段相应地变化。一些组合在两个端口上都失败,其他组合仅在单个端口上失败。