Frage

Wenn Sie eine HTTP in WCF Bindung, muß ich mir besondere Berechtigungen erteilen zu binden in der Lage sein zu diesem Port / Pfad. Ich verstehe, ist dies, weil WCF akzeptiert HTTP-Verkehr durch den http.sys Treiber.

In den alten Tagen, konnten wir neue auf einen Sockel und bindet an jeden alten Hafen, die nicht in Gebrauch war, ohne ein Admin zu sein. NetTcpBinding ist noch in der Lage, dies zu tun.

Wenn ich für http.sys mich nicht, ist es eine Möglichkeit, WCF zu sagen, es nicht zu benutzen, und stattdessen nur einen regelmäßigen alten Sockel zu öffnen, während immer noch über HTTP-Bindungen?

War es hilfreich?

Lösung

WCF HTTP-basierte Bindungen sind auf HttpListener Klasse abhängig, die Wrapper um HTTP-API verwaltet wird. HTTP API ist abhängig von der Art und Weise, wie Betriebssystem Prozess HTTP-Anforderungen. Also, wenn Sie Betriebssystem verwenden, die Anwendungen http.sys-Treiber (Windows 2003 und neuer) können Sie auf sie angewiesen sind.

Edit:

Basierend auf sehr gutes Argument über Cassini verbrachte ich zwei Stunden im Reflektor. Beschreibung folgende ist nur meine Vermutung. Ich habe gefunden, keine Informationen über sie so vielleicht bin ich völlig falsch.

WCF intern enthält einige abstrakte Klasse namens HttpTransportManager diese Klasse durch interne Klassen HostedHttpTransportManager und SharedHttpTransportManager (dies auch für HTTPS existiert in Version) abgeleitet ist. Die erstere ist nicht abhängig von HttpListener aber die letztere ist. Der frühere verwendet wird, wenn WCF in ASP.NET Pipeline gehostet wird - interne Klassen HttpModule und HttpHandler von System.ServiceModel.Activation Montage HostedHttpRequestAsyncResult abhängig von HostedHttpTransportManager verwenden. Je später ein solcher verwendet wird, wenn HttpChannelListener erstellt wird (Selbst-Hosting).

Meine Schlussfolgerung ist, dass WCF-Dienst in ASP.NET Pipeline gehostet wird nicht direkt abhängig von http.sys aber die IIS-Hosting der Pipeline ist. Auf diese Weise können benutzerdefinierte Web-Server erstellen, die nicht auf http.sys abhängig sein wird, wird aber auf Host ASP.NET und so WCF können. Ich denke, das ist es, was Cassini tut. Selbst gehosteten WCF-Dienst ist immer abhängig von http.sys.

Wie ich darüber geschrieben ist mein nur auf ein paar schnellen Reverse Engineering zu erraten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top