2009-06-09 17 views
8

Ich versuche WCF zu verwenden, um eine Kometen-Stil-Server-Push zu einer Ajax-Webanwendung zu implementieren.WCF-Komet und Threads

In meinem WCF-Dienst habe ich eine WaitForEvents-Methode implementiert, die Monitor.Wait aufruft, um den Thread anzuhalten, bis neue Daten eintreffen. An diesem Punkt wird der Monitor gepulst, und die Methode gibt die neuen Daten zurück, die die Komet-Stil-Anfrage schließen.

Die Anfrage wird erneut gemacht, wenn dies geschieht.

Derzeit funktioniert das gut, aber ich habe festgestellt, dass WCF einen neuen Thread für jeden verbundenen Benutzer erstellen muss. Dies liegt wahrscheinlich daran, dass der Thread erst dann in den Threadpool zurückgegeben werden kann, wenn Daten eintreffen, sodass jeder verbundene Benutzer einen neuen Thread benötigt.

Ich möchte diese Implementierung effizienter machen, indem ein Thread mehrere Verbindungen bedient. Wenn ich einen Socket verwenden würde, könnte dies getan werden, indem der Socket offen bleibt und der Thread zuerst an den Thread-Pool zurückgegeben wird. Wenn neue Daten ankommen, werden sie von einem anderen Thread geliefert und wir können die neuen Daten direkt in den Socket schreiben und schließen.

Weiß jemand, wie dies über WCF getan werden kann? Ich habe mir "Push-Style Streaming" http://msdn.microsoft.com/en-us/library/bb472551.aspx angesehen und sie erwähnen, dass "WCF ein" Pull "-Modell implementiert, in dem der Anwendungscode (der Dienst) eine Instanz von Stream zurückgibt und auf der untergeordneten Infrastruktur beruht um Daten aus diesem Stream zu ziehen und in das Netzwerk zu schreiben. " aber ich kann keine Beispiele dafür auf der Website finden.

Vielen Dank im Voraus!

Antwort

2

Check out nComet

Es ist nicht WCF, aber ich glaube, dass der Autor auf eine Version arbeitet die WCF verwendet. Sie erreichen ihn über Codeplex und ihn fragen :-)

„nComet ist eine .NET-Implementierung von der Comet (Reverse-AJAX Push) Architektur. Diese serverseitige Pipeline verwendet langlebige Client initiierte HTTP-Verbindungen zu Push-Nachrichten an den Client. Sobald der Client eine Antwort erhält, es sofort öffnet sich ein weiteres HTTP Anfrage, die der Server hält, bis eine Nachricht bereit ist. Diese Architektur ermöglicht es dem Server dynamisch drücken html/xml/json/etc zum Browser, und nicht der Browser, der den Server abfragt.

scoped Dieses Projekt ist mit der NET serverseitige Architektur, zunächst ein Httplistener Providing (für einen Host benutzerdefinierten Kommunikation mit HTTP.SYS direkt) sowie einer ASP.NET Implementierung, wo das ASP .NET Implementierung kann innerhalb IIS sowie einem externen Prozess gehostet werden. Die Bibliothek wird die Implementierung der gemeinsamen Nachricht Muster wie das Drücken der neuesten Daten, sowie die Synchronisierung vereinfachen. Beispielcode und Links zu mehreren clientseitigen JavaScript-Implementierungen werden auch bereitgestellt werden.. "

1

Sie auch WebSync prüfen wollen, kann eine .NET-Komet Implementierung funktioniert nur Dandy mit WCF

(Disclaimer: Ich für das Unternehmen tätig sind)..