gpt4 book ai didi

c# - 为什么 WCF 服务作为 PID 4 (SYSTEM) 而不是托管它的进程的 PID 进行监听?

转载 作者:可可西里 更新时间:2023-11-01 17:12:53 25 4
gpt4 key购买 nike

我需要在防火墙中添加一条规则,以便我的自托管 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

参见 Configuring HTTP and HTTPS

关于c# - 为什么 WCF 服务作为 PID 4 (SYSTEM) 而不是托管它的进程的 PID 进行监听?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com