2010-07-26 1 views
0

я следующий код для воссоздания клиента ФОС в не открытое состояниеWCF клиент идет к нарушенными сразу

if (client.State != CommunicationState.Opened) 
{ 
    client.Abort(); 

    client = null; 

    Trace.WriteLine("Client object in non opened state. Recreating object"); 

    client = new <WCFClient>("NetTcpBindingEndpoint", ConfigurationManager.AppSettings["ServiceEndPointAddress"]); 

    client.Open(); 
} 

По некоторым причинам, хотя, как только эта процедура возвращается, и я пытаюсь вызвать client.Somemethod(), я получить исключение, и когда я его поймаю, я вижу клиента в неисправном состоянии. Я не понимаю, как это произошло так быстро.

Благодарим за любую помощь заранее.

Subbu

ответ

0

Можете ли вы показать нам, когда вы пытаетесь вызвать client.SomeMethod()?

Я не вижу, чего вы пытаетесь достичь с помощью client.Open() здесь ..... это действительно не имеет никакого смысла - просто позвоните по методу, который вы хотите назвать!

try 
{   
    var client = new <WCFClient>("NetTcpBindingEndpoint", ConfigurationManager.AppSettings["ServiceEndPointAddress"]); 

    client.SomeMethod(); 
    client.Close(); 
} 
catch(FaultException<T> exc) 
{ 
    // handle it 
    client.Abort(); 
} 
catch(CommunicationException exc) 
{ 
    // handle it 
    client.Abort(); 
} 
catch(EndpointNotFoundException exc) 
{ 
    // handle it 
    client.Abort(); 
} 
catch(TimeoutException exc) 
{ 
    // handle it 
    client.Abort(); 
} 

и, возможно, добавить некоторые try.....catch магию вокруг него, чтобы сделать его более безопасным ...., но это не на самом деле все, что вам нужно - не нужно сначала .Open() клиента .....

+0

У меня есть обслуживание окон который отправляет сообщения о статусе через WCF в приложение WinForm. Эти сообщения отправляются быстро. Итак, вместо открытия, используя метод и закрыв клиента WCF из службы Windows, я пытаюсь сохранить его открытым и вызывать его методы в других частях кода. Но при вызове методов клиента я закодировал еще одну процедуру под названием CheckClientStatus() в служебном коде Windows, который проверяет состояние клиента и воссоздает объект, если он находится в не открытом состоянии. – Subbu

 Смежные вопросы

  • Нет связанных вопросов^_^