我需要在防火墙中添加一条规则,以便我的自托管 http Web 服务可以接收请求,但是每当我添加一条规则来指定正在执行托管的程序或服务时,客户端请求就会被阻止。
Netstat 显示监听该端口的 PID 是 4 (SYSTEM)。我不想为对 SYSTEM 的任何调用打开整个端口,我想将调用限制为执行托管的特定程序/服务。任何人都可以提供一些关于如何实现此目标的见解吗?
netstat -ano
TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING 4
TCP [::]:1234 [::]:0 LISTENING 4
这是一个准系统示例(实际托管库是 asp.net mvc4 web api,但我发现原始 wcf web api 和常规 wcf 服务也是如此)。我尝试在其自己的线程上打开服务主机,但这没有任何影响。奇怪的是,当我将 PID 写入控制台时,它是 程序 PID,但 netstat 仍然报告它正在作为 PID 4 收听。
class Host
{
private static HelloWorldService service;
static void Main()
{
Thread HostingThread = new Thread(OpenHostingThread);
HostingThread.Start();
Console.WriteLine("Server Running...");
Console.ReadLine();
}
static void OpenHostingThread()
{
service = new HelloWorldService();
HttpServiceHost host = new HttpServiceHost(service, "http://localhost:1234");
host.Open();
Console.WriteLine(Process.GetCurrentProcess().Id);
}
}
最佳答案
Web API 使用 HTTP 而不是 TCP 作为其传输方式。默认情况下,只允许管理员开始监听 HTTP 端点。如果您希望其他用户这样做,您需要在 Windows 7/2008 上使用 netsh 或在 Windows XP/2003 上使用 httpcfg。
netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user
关于c# - 为什么 WCF 服务作为 PID 4 (SYSTEM) 而不是托管它的进程的 PID 进行监听?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884181/