2012-04-09 6 views
3

Ich habe eine WCF-Implementierung und ich hosten es innerhalb Windows-Dienst (selbst gehostet). Ich benutze Callback-Vertrag, um einige Ereignisse auf der Clientseite auszulösen.
Die Frage ist, wie kann ich sicher sein, oder überprüfen, dass der Client noch am Leben ist, um sein Rückruf-Ereignis auszulösen. Gibt es einen Überprüfungsmechanismus? Ich benutze .NET 3.5.
Danke.Wie erkennen, ob Client für Rückruf in WCF lebt?

Antwort

0

Es gibt keine eingebauten Weg.

Wenn der Client nicht verfügbar ist, um den Rückruf zu verarbeiten, wird der Dienst entweder hängen bleiben oder eine Ausnahme auslösen, wenn er versucht, den Client-Rückruf aufzurufen (abhängig vom Status des Rückrufkanals).

Ein mögliche Lösung für dieses Problem ist here

+1

Ich möchte es anmutig erkennen. Ich möchte es nicht von einer Ausnahme abhängig machen. Kann ich den Callback-Vertrag einfach an ICommunicationObject übergeben und dann seinen Status überprüfen? Würde es funktionieren? – Fer

+0

Es tut mir leid, dass ich die Antwort darauf nicht kenne. –

+0

Danke @hugh. Ich werde CallingContract zu ICommunicationObject umwandeln und prüfen, ob der Status offen ist. Übrigens wird eine bessere Lösung geschätzt. – Fer

0

Mein Ansatz für das gleiche Problem einer „DefaultCallback“ Klasse erstellen sollte, die den Callback-Schnittstelle implementiert und nichts tun (es keine Not ImplmentedException natürlich werfen) . Dann können Sie ein Stück Code wie folgt schreiben:

private IServiceCallBack[] GetCallBack() 
    { 
     var returnValue = new IServiceCallBack[1]; 

     var com = (ICommunicationObject)(returnValue[0] = OperationContext.Current.GetCallbackChannel<IServiceCallBack>()); 

     com.Closing += new EventHandler((object sender, EventArgs e) => 
     { 
      returnValue[0] = new DefaultCallBack(); 
     }); 

     com.Faulted += new EventHandler((object sender, EventArgs e) => 
     { 
      returnValue[0] = new DefaultCallBack(); 
     }); 

     return returnValue; 
    } 

Also, wenn der Rückruf-Client in geschlossenen oder fehlerhaften Zustand ist, wird es durch einen konformen Objekt ersetzt, das nichts tut.