Wir können das Abrufen verwenden, um Informationen zu Updates von bestimmten Quellen zu erhalten, z. B. Clients, die mit einem Webserver verbunden sind. WCF bietet ein raffiniertes Feature für Duplex-Verträge, bei dem ich eine Verbindung zu einem Client aufrechterhalten und auf diese Verbindung nach Belieben zugreifen kann. Einige Peeps im Büro diskutierten die Vorzüge beider Lösungen und ich wollte Feedback darüber bekommen, wann jede Strategie am besten genutzt wird.Abrufen oder nicht abfragen (in einem Webservices-Kontext)
Antwort
Ich würde einen ereignisbasierten Mechanismus statt Polling verwenden. In WCF können Sie dies einfach tun, indem Sie dem Publish-Subscribe-Framework folgen, das Juval Lowy auf seiner Website IDesign.net bereitstellt.
Hängt teilweise davon ab, wie viele Benutzer Sie haben.
Angenommen, Sie haben 1.000.000 Benutzer, die Probleme bei der Verwaltung dieser Sitzungen haben.
Aber wenn Ihr System eine Sekunde lang auf 1000 Abfrageanforderungen reagieren kann, kann jeder Client alle 1000 Sekunden eine Abfrage durchführen.
Ich glaube, Shiraz hat diesen hier getroffen, aber ich wollte noch zwei Dinge sagen.
- Ich hatte Probleme mit Duplex Verträge. Sie müssen alle Ihre Enten in einer Reihe in Bezug auf der Rückrufkanal haben ... Sie müssen überprüfen, um sicherzustellen, dass es geöffnet ist, usw. Die IDesign.info Zeug wäre eine Mindestmenge von Sanitär Code müssen Sie einschließen.
Wenn es sinnvoll für Ihre Lösung macht (dies ist nur angemessen in bestimmten Situationen), die MSMQ-Bindung erlaubt ein Client Daten in einem Asynchron Weise an einen Dienst zu senden (wie Duplex), aber den Dienst ist nicht "polling" für messages ... es wird benachrichtigt, wenn man betritt die Warteschlange durch einige Under-the-Cover-Sanitär.
Diese Art von Kräften Ihnen die Kommunikation drehen (Client-Server wird, Server-Client wird), aber , wenn die Mehrheit der Kommunikation one-way ist, würde dies eine Menge von Vorteilen bieten. Der andere Vorteil hier ist offensichtlich die Warteschlange Kommunikation - der Server kann down sein und keine Nachrichten verpassen ... es wird sie abholen, wenn es wieder online kommt.
Etwas zum Nachdenken.
Außerdem: Wenn Sie eine bidirektionale Kommunikation mit MSMQ benötigen, müssen Sie beide Endpunkte separat implementieren. Der Dienst hätte einen Client und einen Dienst und der Client hätte einen Dienst und einen Client (auf diese Weise können beide Nachrichten senden und empfangen). –