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

标签 c# asp.net wcf http asp.net-web-api

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

相关文章:

c# - 在 C# 中的 mongodb aggregate() 函数驱动程序的管道中使用 $and

c# - System.Text.Json.JsonException : A possible object cycle was detected

c# - 在winforms中使用.dll文件

c# - 为什么我排队的 WCF 消息悄无声息地消失了?

c# - 创建用于测试目的的 Http 请求

asp.net - Hp Touchpad 浏览器 ASP.NET 认为 cookie 已禁用

javascript - Angular 路由 html5mode ASP.NET

asp.net - Model-View-Presenter,View的界面属于哪里?

c# - WCF OperationContract 属性忘记值

c# - ManualResetEvent 不适用于 WCF 和 silverlight