C# 侦听多个端口的WCF服务
我需要在一台服务器上安装WCF服务,但由于运行客户端的机器存在各种问题,我需要侦听多个端口。我不清楚这是否可以通过一个ServiceHost和一个类来实现:一个类是从具有两个端点的CDF ServiceBase派生的,或者我是否需要两个具有单个端点的CDF ServiceBase。以下是相关文件中的相关代码: Program.csC# 侦听多个端口的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
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 端点地址字段相应地变化。一些组合在两个端口上都失败,其他组合仅在单个端口上失败。