Подтвердить что ты не робот

WCF без HTTP.SYS

При использовании связывания HTTP в WCF мне нужно предоставить специальные разрешения, чтобы иметь возможность привязываться к этому порту/пути. Я понимаю, это потому, что WCF принимает HTTP-трафик через драйвер http.sys.

В прежние времена мы могли обновить сокет и связать с любым старым портом, который не использовался, не являясь администратором. NetTcpBinding все еще может это сделать.

Если мне не нужен http.sys, есть ли способ сказать WCF не использовать его, а вместо этого просто открыть обычный старый сокет, все еще используя HTTP-привязки?

4b9b3361

Ответ 1

привязки на основе HTTP на основе WCF зависят от класса HttpListener, который управляется оберткой вокруг HTTP API. HTTP API зависит от способа обработки HTTP-запросов операционной системой. Поэтому, если вы используете операционную систему, которая использует драйвер http.sys(Windows 2003 и новее), вы зависите от нее.

Edit:

Основываясь на очень хорошем аргументе о Кассини, я провел два часа в Reflector. Следующее описание - это только мое предположение. Я не нашел никакой информации об этом, поэтому, возможно, я совершенно не прав.

WCF внутренне содержит некоторый абстрактный класс под названием HttpTransportManager, этот класс выводится внутренними классами HostedHttpTransportManager и SharedHttpTransportManager (этот также существует в версии для HTTPS). Первый не зависит от HttpListener, а второй. Первый используется, когда WCF размещается в конвейере ASP.NET - внутренние классы HttpModule и HttpHandler из System.ServiceModel.Activation. Использование сборки HostedHttpRequestAsyncResult зависит от HostedHttpTransportManager. Более поздний используется при создании HttpChannelListener (самостоятельный хостинг).

Мое заключение заключается в том, что служба WCF, размещенная в конвейере ASP.NET, напрямую не зависит от http.sys, но IIS, на которой размещен конвейер. Это позволяет создавать пользовательский веб-сервер, который не будет зависеть от http.sys, но сможет размещать ASP.NET и WCF. Я думаю, что это то, что делает Кассини. Самостоятельная служба WCF всегда зависит от http.sys.

Как я уже писал выше, это только мое предположение, основанное на некоторой быстрой обратной инженерии.