2010-05-20 1 views
2

클라이언트 - 서버 앱을 사용하고 있습니다. 클라이언트가 시작되면 로그인 화면이 표시됩니다. 서버가 아직 작동하지 않으면 서버 호출은 catch (EndpointNotFoundException) 예외를 throw합니다. 나는 서버가 오프라인이라는 것을 사용자에게 알리는 메시지 박스를 보여준다. 그가 다시 연결을 시도하면 서버가 온라인 상태 임에도 불구하고 또 다른 예외 (CommunicationObjectFaultedException)가 발생합니다. 새 클라이언트가 시작되면 서버에 연결할 수 있습니다. 그러나 전에 시도한 클라이언트는 여전히 오류를 가져옵니다.WCF를 사용하여 첫 번째 시도가 실패한 후 클라이언트가 서버에 다시 연결하려고 할 수 있습니까?

지금 제 질문은 처음 프로그램을 다시 시작하지 않아도 실패한 첫 번째 시도 후에 어떻게 로그인 할 수 있는지입니다. 그래서 나는 그 오류 상태의 통신 채널을 지우고 싶습니다.

미리 감사드립니다.

답변

0

기본적으로 EndpointNotFoundException 핸들러에서 Abort을 호출해야합니다. Here은 추론을 설명하는 기사입니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using ConsoleApplication1.ServiceReference1; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Service1Client Proxy = null; 
      try 
      { 
       Proxy = new Service1Client(); 
       string res = Proxy.GetData(); 
       Console.WriteLine(res); 
       Proxy.Close();  
      } 
      catch (EndpointNotFoundException) 
      { 
       Proxy.Abort(); 
      } 
      Console.ReadKey(true); 
     } 
    } 
} 
+0

나는 할 수 없다. 내 프록시 클래스는 싱글 톤 디자인 패턴이며 "ServiceConnector.ServiceConnector.SingletonServiceConnector.Proxy.Abort();"와 같이 중단을 호출합니다. 내가 예상했던대로, 어느 쪽도 일하지 않고있다. – Terry

+0

왜 내가 Abort를 호출해서는 안되는 지 알지 못합니다. 필자가 제공 한 예제 코드는 확실히 적용 할 수 없지만 일반적인 아이디어 (try - connect, catch - Abort)는 여전히 작동해야합니다. 예제 코드에서와 같이 try에서 프록시를 인스턴스화 할 필요는 없습니다. 물론 다른 곳에서는 싱글 톤으로 인스턴스화 할 수 있습니다! – mafu

관련 문제