2012-02-22 1 views
0

IIS 7.5 및 Windows 2008이 설치된 AppFabric에서 호스팅하고있는 WCF 서비스가 있습니다. 서비스가 권장대로 자동 시작되도록 설정되어 있습니다. 서비스가 시작될 때 결코 끝나지 않는 while 루프가 발생하지만 원하는 동작임을 명심하십시오. while 루프는 사용할 수 있을지 모르는 일부 데이터를 처리하기로되어 있습니다.IIS 또는 웹 사이트가 중지되었음을 확인하는 방법이 있습니까?

문제는 웹 사이트 또는 IIS를 종료 할 때 서비스가 계속 실행되는 것입니다. 그래서 내 질문은 다음과 같습니다.
IIS 또는 웹 사이트가 중지되었음을 확인하는 방법이 있습니까?
이 끝없는 행동을 달성하는 더 좋은 방법이 있습니까?

충분한 정보가 여기에 있습니다.

+4

while 루프는 어떤 기능을 수행합니까 ... 당신이 무한 루프를 사용하는 이유에 여기에 내가 두 번째 다른 우려, 그러나 Learn IIS website

에 사용할 수 있습니까? 왜 네가 가질 필요가 있니? 이 정보는 답변에 도움이됩니다. – usr

+0

Windows 서비스의 호스트일까요? –

+0

usr의 질문과 함께 : 왜 서비스가 영원히 반복되기를 원하십니까? 그것은 틀린 것처럼 보입니다. – NotMe

답변

0

그래, 무한 폴링 루프가 실행 중입니다. 드문 경우이긴하지만이 디자인은 의미가 있습니다.

폴링을 수행하는 별도의 스레드를 시작하는 것이 좋습니다. 스레드 코드는 다음과 같아야합니다 :

void ThreadProc() { 
try { 
    while(true) { ... } 
} 
catch (ThreadAbortException) { 
    //AppDomain shutdown 
} 
} 

모든 스레드를 종료하면 중단됩니다. 이것은 종료를 감지하는 트릭입니다.

는 다음과 같이 스레드를 시작

:

웹 사이트 상태 감지 질문 안부에서
new Thread(ThreadProc) { IsBackground = true } 
+0

나는이 접근법을 시도 할 것이지만 여기에 생각이있다. ThreadAbortException이 없다고 나는 생각하지 않는다. 서비스가 AppFabric에서 전적으로 호스팅되고 IIS가 일종의 호스트 일 뿐이므로 IIS를 죽이지 않는다. 오류 또는 비정상적인 동작에 대한 정보를 제공합니다. 앱에 연결할 수있는 이벤트가있을 수 있습니다. – Oakcool

+0

호스팅 프로세스가 종료되면 수신 할 이벤트가 없습니다. 과정은 * 사라 * 있습니다. 이 경우 알림을받을 수 없습니다. – usr

0

: 당신이 사이트 이름을 알고 있다면, 당신은 사이트가 시작되었는지의 여부를 결정하기 위해 Microsoft.Web.Administration API를 사용할 수 있습니다. 좋은 예는

+0

내가 제안한 바에 따르면 제안을 할 수는 있지만 그 이유는 데이터 조각을 언제 처리해야 하는지를 알기 위해 폴링을하고 있기 때문입니다. 서비스는 실제로 내가 소유하지 않은 다른 서비스에 접속하므로 언제 사용되었는지 알 수 없습니다. 알 겠어. – Oakcool

+0

. 그래서 누군가가 당신의 서비스를 호출하고 응답으로 다른 서비스와 접촉합니다, 맞습니까? 그렇다면 왜 무한히 기다려야합니까? WCF 사용의 요점은 요청이 도착하면 웹 요청과 프로세스 데이터를 처리하는 것 같습니다. 나는 무엇이든지 놓친 것입니까?그럼에도 불구하고 위의 Microsoft.Web.Administration API를 사용하여 사이트가 가동 중인지 여부를 감지 할 수 있어야합니다. –

+0

서비스는 Windows 서비스와 동일하게 동작합니다. Windows 서비스 대신 WCF와 함께 "APPFABRIC"을 사용하고 있습니다. 그래서 아무도 그것을 부르지 않고, 스스로를 충분하게하고, 항상 실행하고, 적절한 정보가 기다리고있는 데이터를 폴링 한 다음 몇 가지 처리가 발생합니다. – Oakcool