2009-07-21 4 views
1

나는 병합 동기화 기능을 허용하기 위해 SQL 서버가 사용 가능할 때를 알아야 할 winform 앱이 있습니다. 나는 한 번에 작동하는 아래의 변형을 시도했지만 좀 더 역동적 인 것을 내놓고 싶습니다.네트워크 상태의 실시간 모니터링. 어떤 사건이 제기 되었습니까?

아래 기능 (감사합니다 Alex_L)은 SQL이 실행되고 잘 작동하는 1433 포트를 확인합니다. 내가 성취하고자하는 것은 Real-Time에서 이것을 모니터하는 방법입니다. Windows 서비스를 만들어야합니까? 네트워크 연결 변경과 같은 다른 네트워크 이벤트는 어떻게됩니까?

가끔씩 연결된 응용 프로그램의 사용법은 간단합니다. 그들이 우리의 네트워크에 있다면 병합 복제 부분을 사용할 수 있습니다. 그들이 우리의 네트워크에 없다면 그렇지 않습니다. SQL Server는 우리 네트워크에서 절대로 사용할 수 없어야하며 항상 켜져 있으면 사용할 수 있어야합니다.

즉, SQL 인스턴스 대신 현재 네트워크를 감지하는 솔루션에 개방적이라고 할 수 있습니다.

 private static bool IsSqlAvailable() 
     { 
      TcpClient tcpc = new TcpClient(); 
      try 
       { 
       tcpc.Connect("10.250.50.30", 1433); 
       return true; 
       } 
      catch 
       { 
       return false; 
       } 
     } 

답변

2

당신은 SQL 서버의 포트 1433을 확인할 수 있습니다

TcpClient tcpc = new TcpClient(); 
try 
{ 
    tcpc.Connect("10.250.50.30", 1433); 
    return true; 
} 
catch 
{ 
    return false; 
} 
+0

감사합니다, 나는 그것을 몰랐다. 이것을 실시간으로 모니터하는 방법은 없습니까? 실시간으로 '흉내 내기'위해 정기적으로 수동으로 점검해야합니까? –

+0

제가 생각하기에, 가장 간단한 방법은 (그리고 제가 프로젝트에서하는 것처럼) Windows 서비스를 작성하는 것입니다. 이 작은 서비스는 Timer 클래스를 사용하여 SQL Server의 가용성을 확인하고 메시지를 적절한 관리자에게 보냅니다. –

1

필자는 두 번째 방법을 사용하여 여러 데이터베이스 속성을 검사하여 추가하여 쓰기가 안전한지 확인합니다.

http://msdn.microsoft.com/en-us/library/ms176049.aspx

아래의 코멘트에 응답하여 확인 플랜 B : 는 SQL 서버가 주요 애플 리케이션에 '하트 비트'의 어떤 종류를 보내 (Ping 또는 무엇이든, 당신까지). 앱을 별도의 스레드로 실행시켜 매 X 초마다 하트 비트를 볼 수 있습니다. 하트 비트 수신을 중지하면 병합을 실행하기 위해 서버에 연결되지 않은 것입니다. (사용 된 경우, 또는 다른)

+0

동적 검사를 구현하는 데 어떻게 사용합니까? 그게 내가 내 질문에 (어쩌면 가난하게) 물어 보려고하는 것이다. 시작할 때뿐만 아니라 실행 중일 때 연결을 사용할 수 있는지 여부를 프로그램에 알리고 싶습니다. –

+0

답변 해 주셔서 감사합니다. 연결이 끊긴 사용자가 200 명인 경우 실행 가능한 옵션입니까? 우리 프로덕션 서버가 200 명의 사용자에게 평범하게 핑 (ping)하도록합니까? 또한 우리는 동적 DNS를 사용하므로 호스트 이름별로 핑 (ping) 할 수 있다고 가정하고 있지만 IP는 항상 변경됩니다. 로컬 시스템이 연결을 모니터하는 방법이 없다고 나는 믿을 수 없다. 그들이 현재 우리 네트워크에 있는지를 보는 것입니다. 연결 상태가 바뀌면 발생하는 이벤트가 있어야합니다. –

+0

내가 아는 한 유일한 방법은 연결이 양호한지를 확인하기위한 내부 검사를 핑 (ping)하고 결과를 확인하는 것입니다. 그 후에 어떤 사건이 제기 될 수 있습니다. 또한 프로덕션 서버가 각 클라이언트 컴퓨터에 200 개의 개별 ping을 만들어야한다고 말하는 것은 아닙니다. 귀하의 서버가 임의의 포트 (예 : 54321)에서 단일 브로드 캐스트를 작성해야한다고 생각합니다. 작업자 스레드가 포트 54321에서 서버에 연결되도록 설계하십시오. 그러면 연결된 모든 클라이언트가 한 번에 그것을 볼 수 있습니다. –

2

내가 how to detect network availability changes을 보여주는 내 블로그에 항목이 있습니다. NotifyAddrChange windows API를 사용하여 IP 인터페이스 주소 매핑 테이블에 변경 사항이있을 때마다 관리되는 이벤트를 발생시킵니다. 이러한 변경 사항은 네트워크 가용성 변경 (케이블 플러그 인, WiFi 연결, VPN 연결, 전화 접속, 3G 전화 접속 등)과 관련되므로 이벤트를 사용하여 서버 가용성을 테스트하고 동기화를 시작할 수 있습니다.

관련 문제