2009-04-13 4 views
11

Wir bekommenWCF Fehler Das Kommunikationsobjekt, System.ServiceModel.Channels.ServiceChanne, kann nicht für die Kommunikation verwendet werden, da sie im Zustand Faulted ist

„Das Kommunikationsobjekt, System.ServiceModel.Channels.ServiceChannel, kann nicht sein, Wird für die Kommunikation verwendet, da es sich im Status "Fehlerhaft" befindet. "

Nachricht, wenn wir die Anwendung schließen. Kann mir jemand sagen, wie ich es beheben kann? Wir wissen, dass es ein Kommunikationskanal ist, der versucht, zu schließen, aber es ist nicht in der Lage, aufgrund eines nicht verfügbaren Dienstes oder eines fehlerhaften Zustands zu schließen.

Alles, was ich sagen kann ist, wenn der Dienst nicht verfügbar ist, aber der Garbage Collector versucht, das Objekt zu zerstören, ruft die Kommunikationsobjekte seinen Dienst Close-Funktion. Da bekommen wir eine Ausnahme.

+0

Ich werde nicht antworten, da ich Ihnen nicht sagen kann, WARUM es falsch war; Sie können jedoch immer überprüfen, ob sich das Problem im fehlerhaften Zustand befindet, bevor Sie versuchen, es zu schließen. – Will

Antwort

12

Wenn Sie eine Frage zu einer Ausnahme stellen, sollten Sie die gesamte Ausnahme einschließlich aller InnerException-Instanzen veröffentlichen. Sie sollten die Ausnahme, Anzeige ex.ToString(), dann erneut auslösen, die Ausnahme mit „werfen“ fangen:

try { 
    // Do whatever causes the exception 
} catch (Exception ex) { 
    Console.WriteLine(ex.ToString()); // Or Debug.Print, or whatever 
    throw; // So exception propagation will continue 
} 

In diesem Fall frage ich mich, wenn Sie einen mit Block um die Proxy-Instanziierung haben:

Es gibt einen Konstruktionsfehler in WCF, der dies über die einzige Stelle in .NET macht, wo Sie keinen mit Block verwenden sollten. Stattdessen müssen Sie es manuell machen. Siehe http://web.archive.org/web/20100703123454/http://old.iserviceoriented.com/blog/post/Indisposable+-+WCF+Gotcha+1.aspx.

Siehe auch "What is the best workaround for the WCF client using block issue?" und "Indisposable WCF clients".

+0

FYI - Link ist kaputt. –

+0

@AlexR: Danke. Über Wayback Machine behoben und zwei weitere Links hinzugefügt. –

0

Werfen Sie einen Blick auf das Proxies-Projekt here.

Wir hatten ein ähnliches Problem und diese Technik hat es behoben. Es beinhaltet im Wesentlichen das Erben von einer Klasse, die den Kanal bei einem Fehler automatisch neu erstellt.

Verwandte Themen