Eine selbst gehostete Anwendung scheint nicht von IIS zu starten, benötigt sie also ein bestimmtes Betriebssystem, um Web-Sockets auf der Serverseite zu aktivieren?benötigt der selbst gehostete Signalgeber Windows Server 2012, um WebSockets zu verwenden?
Antwort
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.
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
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. –
@ 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
wie kann es sein eine Funktion auf Betriebssystemebene, wenn ein Browser, der HTML5 unterstützt, Websockets zulässt? –
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 ...
- 1. Signalgeber: WebSockets Verbindungsproblem
- 2. Selbst gehostete S3-Alternative
- 3. Selbst gehostete Bitbucket persmission
- 4. Verwenden Sie Signalgeber, um alle Clients außer Self zu benachrichtigen
- 5. Wie kann ich Windows-Indexdienst in Windows-Server 2012 verwenden
- 6. Git auf dem Server (Windows Server 2012)
- 7. C++ WebSockets Server/Client krossplattformischen Linux/Windows
- 8. Ninject WCF selbst gehostete Injektion
- 9. Windows Server 2012 und IIS
- 10. Frustriert mit Visual Studio 2012 unter Windows Server 2012
- 11. auf Windows Server 2012 R2
- 12. Windows Server 2012 R2 KMS
- 13. Mit Knoten Parse API für selbst gehostete Parse Server
- 14. Warum benötigt der Gruppenrichtliniensicherheitsfilter für Windows Server 2012 R2 einen Computer?
- 15. Wie Windows Windows 8.1 Microsoft Account mit Sql Server 2012
- 16. .Net WebSockets in Windows-Dienste
- 17. Azure VM Windows Server 2012-Updatefehler 800F0922
- 18. Selbst gehostete Roboto-Schrift wird nicht gerendert
- 19. Oracle 11gR2 Installation unter Windows Server 2012
- 20. StartsWith Änderung in Windows Server 2012
- 21. interop.MODI.dll funktioniert nicht in Windows Server 2012
- 22. Windows Server 2012 mit ASP.net 1.1?
- 23. Windows Server 2012 abmelden oder trennen?
- 24. Sonarqube Installation auf Windows Server 2012
- 25. npm install bcrypt unter Windows Server 2012
- 26. Authentifizierung in Powershell zu Windows Server 2012 PKI
- 27. Windows Server 2012 R2 Core-Schnittstelle deaktivieren
- 28. Spawn auf Knoten JS (Windows Server 2012)
- 29. Azure Windows Server 2012 Erstellen eines Benutzerkontos für FTP-Server
- 30. Benötige ich einen Server, um die WebSockets von HTML5 zu verwenden?
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
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
@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