2013-07-30 5 views

Antwort

22

Browser werden es unterstützen, weil sie das Protokoll intern implementiert haben, verwenden die meisten Browser nicht das Betriebssystem Transportbibliotheken so Sie können WebSockets verwenden, auch wenn das Betriebssystem dies nicht direkt unterstützt.

HTTP.SYS vor Windows 8/2012 has no built in support for WebSockets, obwohl .NET 4.5 WebSocket-Klassen enthält, funktionieren sie nur, wenn Sie .NET 4.5+ unter Windows 8/2012 ausführen, und dies wirkt sich auf Self-Hosting-Lösungen aus läuft in Windows < 8.

Die Implementierung befindet sich in dem Betriebssystem-Code, der .NET und IIS8 gerade nutzt. Die .NET-Klassen wickeln Aufrufe einfach zu HTTP.SYS durch, sodass eine Ausnahme auf einem Betriebssystem ausgelöst wird, das keine zugrunde liegende Unterstützung dafür bietet.

Beim Self-Hosting können Sie jedoch Ihren eigenen internen Socket-Server wie Fleck verwenden und SignalR mitteilen, dass Sie Web Sockets unabhängig von Ihrem Betriebssystem tatsächlich unterstützen.

Start Fleck Server in Ihrer selbst gehosteten Anwendung (Beispiele auf their site) und als Beispiel Sie dies für einen PersistentConnection Selbst Host tun können:

public override Task ProcessRequest(HostContext context) 
{ 
    // Override what SignalR will be telling you internally and point to your own Web Socket Server. 
    context.Items[HostConstants.SupportsWebSockets] = true; 
    context.Items[HostConstants.WebSocketServerUrl] = "ws://localhost:3000"; 
    return base.ProcessRequest(context); 
} 

Haftungsausschluss: Dies ist eine nicht dokumentierte Funktion Die Entwickler von SignalR haben mir gesagt, dass dies in zukünftigen Versionen der Bibliothek nicht möglich sein wird. Denken Sie daran, dass Sie auch für Keep-Alive sorgen und Ihre Daten zu JSON serialisieren müssen, damit es mit den SignalR-Clients gut spielt. Es funktioniert immer noch in Version 1.1.3.

+1

Na dann ist die Lösung einfach. Nur zurück-Port HTTP.sys zu früheren Version! Wie # $% @% # @ $ schwer kann das sein? Wir haben Entwicklungshardware, die wir gerne zu Win8 bewegen würden, aber wir können keine Win8-Treiberunterstützung haben, so dass wir mit win7 festgefahren sind. – Kaboo

+0

Ich hätte gerne mehr Informationen dazu. Ich habe versucht, etwas ähnliches für eine Weile zu tun und wusste bis jetzt nicht, dass dies eine Option war. Ich habe einen benutzerdefinierten WebSocket-Server, der auf einem Port lauscht, und ich habe den obigen Code hinzugefügt, der auf den Port verweist, aber wie gehe ich vor, damit der owin-Teil damit arbeitet? Beispiel: WebApp.Start < > ('localhost: 12345') startet einen HTTP-Listener für das Signal r. – sqenixs

+0

@sqenixs Wenn Sie SignalR einrichten, machen Sie nichts anderes, Sie müssen 'ProcessRequest' nur in Klassen überschreiben, die von PersistentConnection oder HubConnection erben. Owin hat mit dieser Frage oder der Antwort nichts zu tun und ist völlig nebensächlich. – BrutalDev

0

Ja, es erfordert Windows Server 2012 Prüfung das Zitat unten von SignalR Supported Platforms

Die SignalR Server-Komponente kann in dem folgenden Server oder Client-Betriebssystemen gehostet werden. Beachten Sie, dass für SignalR zur Verwendung von WebSockets Windows Server 2012 oder Windows 8 erforderlich ist (WebSocket kann auf Windows Azure-Websites verwendet werden, sofern die .NET Framework-Version der Site auf 4.5 festgelegt ist und Web Sockets auf der Site aktiviert ist Konfigurationsseite).

auch ein gutes Buch darüber, warum kann here

+0

Richtig, aber das ist nur, weil es IIS über asp.net verwendet. Ein selbst gehosteter Signalgeber benötigt IIS 8 nicht unbedingt. Wenn Sie sich die Quelle ansehen, sieht es so aus, als ob WebSockets in OWIN eingebunden ist, solange .net 4.5 installiert ist. Ich habe nicht die Uber-Fähigkeiten zu lesen und sicher zu wissen, aber darum frage ich. –

+0

@ ton.yeung Eigentlich nein, es ist eine OS-Level-Funktion, weil sogar die Client-Anwendungen Windows 8 ausführen müssen, wenn Sie einen Browser als Client verwenden, dann benötigen Sie einen Browser mit HTML 5 Unterstützung – MEYWD

+0

wie kann es sein eine Funktion auf Betriebssystemebene, wenn ein Browser, der HTML5 unterstützt, Websockets zulässt? –

1

finden Ich habe sicher wissen, dass WebSockets nicht jetzt unterstützt durch einen schnellen Test zu tun. Ich habe einen selbst gehosteten Hub und dann einen schnellen jQuery-Client erstellt. Auf meinem Windows 8 Rechner zeigte die Querystring WebSockets, auf dem Server 2008 r2 zeigte es lange Polling ...

Verwandte Themen