2012-06-04 4 views
2

서비스 호출을하기 전에 WCF 서비스를 사용할 수 있는지 여부를 알고 싶습니다. 가장 좋은 방법은 무엇일까요?WCF 서비스 가용성을 확인하는 방법?

어떻게 사용에 대한 :

bool isServiceUp = true; 
try 
{ 
    string address = "http://localhost/MyService.svc?wsdl"; 

MetadataExchangeClient mexClient = new MetadataExchangeClient(new Uri(address), MetadataExchangeClientMode.HttpGet); 
    MetadataSet metadata = mexClient.GetMetadata(); 
// if service down I get the exception 
} 
    catch (Exception ex) 
{ 
    isServiceUp = false; 
} 

내 서비스 바인딩 순 TCP를 사용하고 있습니다.

net tcp 바인딩에 사용할 수 있습니까?

편집 : 감사합니다. JaredPar. 첫 번째 호출이 성공하고 두 번째 호출에서 서버가 다운 된 경우를 가정합니다. 그래서 서비스 호출을하기 전에 나는 OPEN 상태에있는 프록시의 상태를 확인하고 따라서 결국 시간 초과되는 서비스 호출을합니다. 어떤 열린 시간이나 닫는 시간을 설정하지 않았기 때문에 기본적으로 1 분이 걸리며이 호출은 프록시를 처리하는 서비스의 오류 이벤트 처리기에 걸리게됩니다. 그러나 그때까지 UI가 멈추었을 때 나는 무엇을합니까?

안내하십시오.

답변

4

이 유형의 테스트는 단순히 불가능합니다. 주어진 WCF 또는 실제로 네트워킹 호출이 성공하기 전에 성공할 것인지를 안정적으로 감지 할 수있는 방법이 없습니다. 당신이 통제 할 수없는 변수가 너무 많습니다.

  • 물리적 네트워크
  • 코드 또는 WCF 코드가 실행되는 경우 WCF는
  • 실제 WCF 프로그램
  • 컴퓨터의 하드 드라이브의 안정성을 실행중인 시스템의 전원

이러한 항목은 언제든지 종료/변경할 수 있습니다. 따라서 주어진 호출이 성공할 것인지 아닌지 예측할 수 없습니다.

이 문제에 접근하는 가장 좋은 방법은 단순히 호출이 실패한 경우를 처리하는 코드를 추가하는 것입니다.

+0

감사합니다. Jaredpar, 질문을 업데이트했습니다. –

0

아래 코드를 사용해보십시오. ServiceController 클래스는 'System.ServiceProces'네임 스페이스에 있습니다.

try 
{ 
    ServiceController sc = new ServiceController("Service Name", "Computer's IP Address"); 
    Console.WriteLine("The service status is currently set to {0}", 
     sc.Status.ToString()); 

    if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) || 
     (sc.Status.Equals(ServiceControllerStatus.StopPending))) 
    { 
     Console.WriteLine("Service is Stopped, Ending the application..."); 
     Console.Read(); 
     EndApplication(); 
    } 
    else 
    { 
     Console.WriteLine("Service is Started..."); 
    } 
} 
catch (Exception) 
{ 
    Console.WriteLine("Error Occurred trying to access the Server service..."); 
    Console.Read(); 
    EndApplication(); 
} 
관련 문제