Ich bin komplett neu in WCF. Ich war mir ziemlich sicher, dass es wie normale Webdienste funktionieren würde - und ich bin mir auch ziemlich sicher, dass ich das auch falsch gemacht habe, aber jetzt möchte ich sicherstellen, dass ich es richtig mache.Verwenden von WCF in einer ASP.Net-Anwendung und Best Practices
Unsere ASP.Net App verbindet sich mit dem WCF-Dienst über das Internet. Ich habe grundlegende Sicherheit implementiert und SSL verwendet. Es funktioniert, aber langsamer als bei regulären Webdiensten. Die zurückgegebenen Daten entsprechen im Wesentlichen denen des regulären Webdienstes.
Wenn ich den regulären Webdienst nutzte, musste ich jedes Mal, wenn ich Daten abrufen musste, ein neues Serviceobjekt erstellen und die Funktion für die benötigten Daten aufrufen. Das schien in Ordnung zu sein, aber wie ich mir vorstellen konnte, war es nicht der beste Weg, es zu tun, besonders wenn Tausende von Benutzern gleichzeitig verbunden waren. Als ich zu WCF konvertiert habe, habe ich beschlossen, einen Client offen zu halten und ihn nur für alle zu verwenden, die sich mit der Site verbinden. Ich habe es in den Cache gestellt, und wenn der Cache das Objekt auswerfen würde, hatte ich eine Rückruffunktion, um es zu entfernen.
Jetzt habe ich nicht einmal darüber nachgedacht, bis ich all das geändert habe, dass es ein Problem für mehrere Leute darstellen könnte. Wenn Person A Daten anfordert, muss Person B darauf warten, dass dies beendet ist, bevor ihre Daten über den Dienst abgerufen werden.
Also änderte ich es auf Session-basierte. Ich habe das entweder falsch umgesetzt oder es ist einfach fehlgeschlagen, da es überhaupt nicht gut funktioniert hat. Der Client würde eine Zeitüberschreitung verursachen, einen Fehler verursachen oder einfach nicht arbeiten. Ich habe es für den Moment zurück auf Cache geändert und es scheint gut zu funktionieren (außer langsam).
Was ist eine "Best Practice" für dieses Szenario? Erstelle ich den Client im laufenden Betrieb, wenn er benötigt wird, erstelle ich eine Sitzung (und finde heraus, was ich falsch gemacht habe), oder behalte ich ihn so wie er ist und verwende die zwischengespeicherte Client-Methode?
+1. Gute Frage. – AnthonyWJones