自托管 WCF 数据服务 - 指定要侦听的 IP 地址?
Self Hosted WCF Data Service - Specify IP Address to Listen on?
我编写了一个自托管在 Windows 控制台应用程序中的 WCF 数据服务。
服务使用以下代码初始化:
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();
}
}
当我 运行 这样做时,控制台应用程序 运行s 似乎在 0.0.0.0:9999 而不是 12.34.56.78:9999 上监听。
这是否意味着该服务正在侦听所有 IP 地址?
有没有办法让服务只监听指定的 IP (12.34.56.67:9999)?
谢谢
要指定监听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>
我编写了一个自托管在 Windows 控制台应用程序中的 WCF 数据服务。
服务使用以下代码初始化:
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();
}
}
当我 运行 这样做时,控制台应用程序 运行s 似乎在 0.0.0.0:9999 而不是 12.34.56.78:9999 上监听。
这是否意味着该服务正在侦听所有 IP 地址?
有没有办法让服务只监听指定的 IP (12.34.56.67:9999)?
谢谢
要指定监听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>