WCF sans HTTP.SYS
Question
Lorsque vous utilisez une liaison HTTP dans WCF, je dois me accorder des autorisations spéciales pour être en mesure de se lier à ce port / chemin. Je comprends c'est parce que WCF accepte le trafic HTTP à travers le http.sys conducteur.
Dans l'ancien temps, nous pourrions un nouveau socket et se lient à un vieux port qui n'a pas été utilisé, sans être un administrateur. NetTcpBinding est encore capable de le faire.
Si je ne me soucie pas de http.sys, est-il un moyen de dire WCF de ne pas l'utiliser, et au lieu de simplement ouvrir une prise régulière ancienne tout en utilisant les liaisons HTTP?
La solution
WCF liaisons HTTP à base dépendent de la classe HttpListener
qui est géré wrapper autour de l'API HTTP. HTTP API dépend de la manière dont le processus de système d'exploitation des requêtes http. Donc, si vous utilisez le système d'exploitation que vous dépendent du pilote (Windows 2003 et plus récent) de l'utilise.
Modifier
Sur la base de très bon argument de Cassini I a passé deux heures dans le réflecteur. À la suite de la description est seulement mon hypothèse. Je ne l'ai pas trouvé aucune information à ce sujet peut-être que je suis tout à fait tort.
WCF contient en interne une classe abstraite appelée HttpTransportManager
cette classe est dérivée par les classes internes HostedHttpTransportManager
et SharedHttpTransportManager
(celui-ci existe aussi en version pour HTTPS). L'ancien ne dépend pas de HttpListener
mais celui-ci est un. L'ancien est utilisé lorsque WCF est hébergé dans ASP.NET pipeline - les classes internes HttpModule
et HttpHandler
de System.ServiceModel.Activation utilisent l'ensemble HostedHttpRequestAsyncResult
dépendant HostedHttpTransportManager
. Celui plus tard est utilisé lorsque HttpChannelListener
est créé (auto-hébergement).
Ma conclusion est que le service WCF hébergé dans ASP.NET pipeline n'est pas directement dépendante http.sys mais l'IIS hébergeant le pipeline est. Cela permet de créer serveur Web personnalisé qui ne sera pas dépendant http.sys mais sera en mesure d'hôte ASP.NET et ainsi WCF. Je pense que c'est ce que fait Cassini. 'Autonome service WCF est toujours dépendant http.sys.
Comme je l'ai écrit ci-dessus c'est que je devine basé sur une ingénierie inverse rapide.