Почему служба WCF прослушивает как PID 4 (SYSTEM), а не как PID процесса, в котором она размещена? - PullRequest
1 голос
/ 27 марта 2012

Мне нужно добавить правило в брандмауэр, чтобы мой размещенный http веб-сервис мог принимать запросы, однако всякий раз, когда я добавляю правило, которое указывает программу или службу, выполняющую хостинг, клиентские запросы блокируются.

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);
    }
}

Ответы [ 2 ]

1 голос
/ 17 августа 2012

В сетевых сокетах только один процесс / поток может прослушивать данный порт, поэтому HTTP.sys позволяет нескольким веб-сайтам прослушивать один и тот же порт 80, перехватывая все запросы и перенаправляя их соответствующему процессу в соответствии с URI / переплет.

Как служба WCF может прослушивать тот же порт, что и IIS?

WCF без HTTP.SYS

HTTP.sys Статья

Когда вы создаете веб-сайт, IIS регистрирует сайт с помощью HTTP.sys, который затем получает любые HTTP-запросы для сайта. Функции HTTP.sys как сервер пересылки, отправляет полученные веб-запросы на запрос очередь для процесса пользовательского режима, который запускает веб-сайт или веб приложение. HTTP.sys также отправляет ответы обратно клиенту.

1 голос
/ 27 марта 2012

Веб-API использует HTTP, а не TCP в качестве транспорта. По умолчанию только администратор может прослушивать конечные точки HTTP. Если вы хотите, чтобы это сделал другой пользователь, вам нужно использовать netsh в Windows 7/2008 или httpcfg в Windows XP / 2003.

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

См. Настройка HTTP и HTTPS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...