Probleme mit der Using-Anweisung und dem WCF-Client

8

Ich habe den gesamten Code, der WCF-Aufrufe aufruft, innerhalb einer using-Anweisung in einem Gedanken eingeschlossen, dass das Objekt ordnungsgemäß entsorgt wird. Wenn ich nach einer Ausnahme google "HTTP-Dienst befindet sich bei .. ist zu beschäftigt" Ich fand diesen Link Ссылка , das sagt, sollte keine Verwendung von Anweisungen in typisierten Proxies verwenden. Ist das wirklich wahr? Ich denke, ich habe einen großen Codewechsel (Seufzer). Tritt dieses Problem nur bei typisierten Proxies auf?

Beispielcode:

%Vor%     
VJAI 18.07.2011, 07:38
quelle

3 Antworten

16

Der Kern des Problems ist: Am Ende Ihres using -Blocks (was normalerweise eine sehr gute Idee ist!) wird der WCF-Proxy entfernt. Bei der Bereitstellung des WCF-Proxys können jedoch Ausnahmen auftreten, die zu einem Fehlverhalten der App führen. Da dies implizit am Ende des Blocks using geschieht, sehen Sie möglicherweise nicht einmal wirklich, wo der Fehler auftritt.

Also Microsoft empfiehlt normalerweise ein Muster wie folgt:

%Vor%

Sie müssen die Methode proxy.Close() explizit aufrufen und darauf vorbereitet sein, alle Ausnahmen zu behandeln, die möglicherweise auch von diesem Aufruf auftreten.

    
marc_s 18.07.2011, 07:52
quelle
2

Wickeln Sie die Proxy-Operationen und Instanziierungsaufrufe in eine Klasse, die IDisposable implementiert. Überprüfen Sie bei der Entsorgung die Statuseigenschaft des Proxys und ordnen Sie den Kanal vor dem Schließen auf.

%Vor%     
HoganNZ 15.09.2012 22:21
quelle
1

Ich mag den Ansatz aus dem Kommentar von "Eric" in diesem Blog (der einem anderen Artikel ähnlich ist: Ссылка ):

"Persönlich möchte ich meine eigene partielle Klasse für den Client erstellen und die Dispose () -Methode überschreiben. Dadurch kann ich den 'using' -Block wie gewohnt verwenden.

%Vor%     
Aligned 16.09.2013 19:49
quelle

Tags und Links