Wenn Sie mit WCF-Diensten arbeiten, ist es besser, bei jeder Verwendung eine neue Instanz des Dienstes zu erstellen? Oder ist es besser, einen zu erstellen und ihn wiederzuverwenden? Warum ist beides besser? Ist das bei asynchronen Proxies gleich?Best Practice für WCF Service Proxy-Lebensdauer?
Antwort
Zusätzlich zu den Dingen, die Guy Starbuck erwähnt, wäre ein Schlüsselfaktor das Sicherheitsmodell, das Sie verwenden (in Verbindung mit den Sitzungsanforderungen) - wenn Sie Ihren Proxy nicht wiederverwenden, können Sie nicht Verwenden Sie eine Sicherheitssitzung.
Dies bedeutet, dass der Client sich bei jedem Aufruf authentifizieren müsste, was verschwenderisch ist.
Wenn Sie jedoch entscheiden, dass dies das ist, was Sie tun möchten, stellen Sie sicher, dass der Client keinen Sicherheitskontext erstellt (wie Sie ihn nie benutzen werden). Dadurch ersparen Sie sich ein paar Roundtrips zum Server :-)
Es gibt eine logische Folge hier Server aktivierte Objekte in .NET Remoting (eine der Technologien, die WCF ersetzt wird), die zwei Modi haben, "Single Call" (zustandslos) und "Singleton" (Stateful).
Der Ansatz von WCF sollte auf Ihren Leistungs- und Skalierungsanforderungen in Verbindung mit den Anforderungen Ihrer Kunden sowie auf serverseitigen Designbeschränkungen basieren.
Wenn Sie den Status zwischen den Aufrufen des Dienstes beibehalten müssen, möchten Sie natürlich eine statusbehaftete Instanz haben, aber wenn Sie dies nicht tun, sollten Sie sie wahrscheinlich so implementieren, dass sie besser skaliert werden kann kann Balance leichter laden, etc).
Ein weiterer zu berücksichtigender Punkt sind Kanalfehler. Standardmäßig kann WCF den Client-Proxy nicht verwenden, nachdem eine nicht behandelte Ausnahme aufgetreten ist.
IMyContract proxy = new MyContractClient();
try
{
proxy.MyMethod();
}
catch
{}
//Throws CommunicationObjectFaultedException
proxy.MyMethod();
Oder ist es besser, zu erstellen und sie wiederverwenden?
Beginnen Sie nicht mit der Implementierung Ihrer eigenen Poolimplementierung. Das wurde bereits im Rahmen getan. Ein WCF-Proxy verwendet im Cache gespeicherte Kanäle. Daher ist das Erstellen neuer Proxys nicht übermäßig teuer (aber siehe die Antwort von Guy Starbuck bezüglich Sitzungen und Sicherheit!).
Beachten Sie auch, dass ein Proxy nach einer bestimmten Leerlaufzeit (standardmäßig 10 Minuten) abbricht.
Wenn Sie eine explizitere Kontrolle wünschen, können Sie ChannelFactories und Kanäle direkt anstelle der ClientBase-Proxies "einfach zu verwenden" verwenden.
http://msdn.microsoft.com/en-us/library/ms734681.aspx
Und zu diesem Thema "must read" ist: http://blogs.msdn.com/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx
- 1. Best Practice für Abfragen und WCF-Service
- 2. Best Practice für große WCF-Service?
- 3. Best Practice für Service- und Datenverträge - WCF
- 4. WCF: serverseitige Fehlerbehandlung. Best Practice
- 5. WCF Best Practice für Client/Server mit Benachrichtigungen
- 6. Best Practice für Bilder
- 7. Best Practice für NSNotifications
- 8. Best Practice für Webservices
- 9. Best Practice zum Verwalten von Web-Service-Anmeldedaten für Node.JS?
- 10. Best Practice für Dienstprogramme Klasse?
- 11. Best Practice für Datenbank Kreuzwertspeicher
- 12. Best Practice für PHP-Pfade
- 13. PayPal - Best Practice für Kontoauszug
- 14. Best Practice für PHP-Ausgabe
- 15. Best Practice für SQL-Tests
- 16. Best Practice für Java IPC
- 17. Userfrosting Best Practice für Hilfsfunktionen
- 18. Azure-Webrollen - Mischen von MVC und WCF - Best Practice
- 19. Best Practice von RestAngular
- 20. Best Practice für große XML-Datei Builder
- 21. Best Practice für Aufrufe für Ressourcen
- 22. IUnitOfWork Anleitung - Best Practice
- 23. Best-Practice für die Benennung eines WCF-Endpunkts für einen iis-gehosteten Dienst?
- 24. Führt Web-Service-Anrufe in Apple-Best Practice?
- 25. Best Practice, um Service in Kubernetes mit Calico anzuzeigen
- 26. Best Practice Android Design: verstecktes Webview, Fragment, Service?
- 27. Best Practice Phonegap Architektur
- 28. Android Hintergrund Dienstleistungen Best Practice
- 29. C# Subclass Best Practice
- 30. Spring Webflow Best Practice
ich Brian glauben bittet um die Wiederverwendung von Client-Proxy. Dies ist für den Lebenszyklus der serverseitigen Instanz nicht relevant –
Mein Down-Vote ist aus dem gleichen Grund wie Andrey. Ich sehe nicht, was das InstanceManagement auf der Serverseite mit der Lebensdauer des clientseitigen Proxys zu tun hat. Vielleicht könntest du es erklären? –
Sie haben beide Recht, es scheint, dass ich ursprünglich die Frage als auf den Serverlebenszyklus bezogen, nicht Client-Proxy interpretiert. Ich werde fortfahren und meine Antwort hier als Teil der Diskussion hinterlassen, da sie in den Antworten anderer Leute erwähnt wird. –