WCF Callback-Kanal fehlgeschlagen

Bin ich versucht zu implementieren, um einen reconnect Logik für einen wcf-client. Ich bin mir bewusst, dass Sie haben, um eine neue Kanal nach dem aktuellen channel betrat den fehlerhaften Zustand. Ich Tat dies in einem channel bemängelt event-handler:


internal class ServiceClient : DuplexClientBase, IServiceClient
{
  public ServiceClient(ICallback callback, EndpointAddress serviceAddress)
   : base(callback, MyUtility.GetServiceBinding("NetTcpBinding"), serviceAddress)
  {
   //Open the connection.
   Open();
  }

  public void Register(string clientName)
  {
    //register to service
  }

  public void DoSomething()
  {
    //some code
  }
 }

 public class ClientApp
 {
  private IServiceClient mServiceClient;

  private ICallback mCallback;

  public ClientApp()
  {
   mServiceClient = new ServiceClient( mCallback, new EndpointAddress("someAddress"));

   mServiceClient.Register();

   //register faulted event for the  service client
   ((ICommunicationObject)mServiceClient).Faulted += new EventHandler(ServiceClient_Faulted);
  }

  void ServiceClient_Faulted(object sender, EventArgs e)
  {
   //Create new Service Client.
   mServiceClient = new ServiceClient( mCallback, new EndpointAddress("someAddress"));

   //Register the EI at Cell Controller
   mServiceClient.Register();
  }

  public void DoSomething()
  {
   mServiceClient.DoSomething();
  }
 }

Aber in meinem unit-test bekomme ich noch einen "auf Dem Kommunikationsobjekt "System".ServiceModel.- Kanäle.ServiceChannel, nicht für die Kommunikation verwendet, weil es sich bei den Fehlerhaften Zustand" Ausnahme.

Ist es möglich, dass die callback-Kanal ist immer noch nichts zu beanstanden und wenn ja, wie kann ich ersetzen Sie den callback-Kanal?

  • Könntest du angeben, was Ihr unit-test macht, wenn es wird die Ausnahme?
  • In meinem unit-test, die ich erstellt einen service-host und ein client-Instanz. Ich registrieren, den client auf den Dienst und dann habe ich den Dienst beenden, indem die Referenz auf null. Danach habe ich 20 Sekunden warten (ich bin mit einem zuverlässigen Sitzung mit einem InactivityTimeoutof 10 Sekunden, so bin ich sicher, die Verbindung ist lossed nach 20 Sekunden) und dann rufe ich die Methode DoSomething() auf dem client. Jetzt habe ich neu den service und erwarten, dass der client neu zu verbinden. In diesem moment bekomme ich die exception.
InformationsquelleAutor phatoni | 2009-10-12
Schreibe einen Kommentar