自承载 WCF 数据服务 - 指定要侦听的 IP 地址

本文关键字:地址 IP WCF 数据 服务 | 更新日期: 2023-09-27 18:36:49

我编写了一个 WCF 数据服务,该服务自承载在 Windows 控制台应用程序中。

使用以下代码初始化该服务:

static void Main(string[] args)
{
    DataServiceHost host;
    Uri[] BaseAddresses = new Uri[] { new Uri("http://12.34.56.78:9999")};
    using (host = new DataServiceHost( typeof( MyServerService ), BaseAddresses ) )
    {
        host.Open(); 
        Console.ReadLine();
    }
}

当我运行它时,控制台应用程序运行并似乎侦听 0.0.0.0:9999 而不是 12.34.56.78:9999。

这是否意味着服务正在侦听所有 IP 地址?

有没有办法让服务只侦听指定的 IP (12.34.56.67:9999)?

谢谢

自承载 WCF 数据服务 - 指定要侦听的 IP 地址

要指定侦听 IP,必须使用 HostNameComparisonMode.Exact 。 例如,下面的代码在NETSTAT中打印以下内容:

C:'drop>netstat /a /p tcp
Active Connections
  Proto  Local Address          Foreign Address        State
  TCP    10.200.32.98:9999      Zeta2:0                LISTENING

从代码:

class Program
{
    static void Main(string[] args)
    {
        Uri[] BaseAddresses = new Uri[] { new Uri("http://10.200.32.98:9999") };
        using (var host = new ServiceHost(typeof(Service), BaseAddresses))
        {
            host.AddServiceEndpoint(typeof(Service), new BasicHttpBinding() { HostNameComparisonMode = HostNameComparisonMode.Exact }, "");
            host.Open();
            Console.ReadLine();
        }
    }
}
[ServiceContract]
class Service
{
    [OperationContract]
    public void doit()
    {
    }
}

从配置:

<basicHttpBinding>
    <binding name="yourBindingName" hostNameComparisonMode="Exact" />
</basicHttpBinding>