문제

대본:WCF 서비스는 클라이언트로부터 XDocument를 수신하고 이를 처리한 후 MS SQL 테이블에 행을 삽입합니다.

여러 클라이언트가 동시에 WCF 서비스를 호출할 수 있습니다.통화는 일반적으로 오래 걸리지 않습니다(몇 초).

이제 나는 필요하다 무엇 SQL 테이블을 폴링하고 비동기 방식으로 다른 프로세스 세트를 실행합니다.두 번째 프로세스는 아무것도 콜백할 필요가 없으며 어떤 방식으로든 WCF와 관련이 없습니다.테이블을 읽고 일련의 메소드를 수행하고 웹 서비스 호출(물론 레코드가 있는 경우)만 수행하면 되지만 그게 전부입니다.위에 언급된 서비스를 사용하는 WCF 서비스 클라이언트는 이에 대해 전혀 모르고 신경 쓰지도 않습니다.

나는 다음과 같은 내용을 읽었습니다. StackOverflow의 이 질문 또한 Windows 서비스가 이상적이라는 것도 알고 있지만 이 WCF 서비스는 공유 호스팅(discountasp 또는 유사)에서 호스팅되므로 Windows 서비스를 설치할 수 없습니다(제가 아는 한).

아키텍처가 고정되어 있다는 점을 고려하면(즉:테이블을 변경할 수 없으며 레거시 형식에서 나오거나 WCF 서비스의 메커니즘을 변경할 수 없습니다. 이 테이블을 폴링/처리하기 위한 제안은 무엇입니까?

10분마다 확인해야 한다고 하더군요.즉각적 일 필요는 없습니다.

감사해요.

도움이 되었습니까?

해결책

속이다.이 프로세스를 다른 WCF 서비스로 노출하고 예약된 시간에 제어할 수 있는 상자에서 go 명령을 실행합니다.

WCF에서 백그라운드 스레드를 실행하거나 캐시 만료를 가난한 사람의 스케줄러로 사용할 수 있지만 웹 사이트의 다음 히트까지 앱 풀이 재활용되고 앱 풀이 다시 회전할 때까지 중지됩니다.최소한 제어하는 ​​컴퓨터에서 요청을 실행한다는 것은 해당 방향으로 요청을 보냈기 때문에 앱 풀이 약 10분마다 다시 작동한다는 것을 의미합니다.

다른 팁

웹 애플리케이션은 고정된 간격으로 무언가를 실행하는 데 전혀 적합하지 않습니다.들어오는 요청이 없으면 응용 프로그램에서 실행 중인 코드가 없으며 응용 프로그램이 한동안 비활성 상태인 경우 IIS는 다음 요청이 들어올 때까지 응용 프로그램을 완전히 종료하기로 결정할 수 있습니다.

일부 응용 프로그램의 경우 특정 간격으로 무언가가 실행되는 것이 전혀 중요하지 않으며 최근에 실행되었다는 사실만 중요합니다.이것이 애플리케이션의 경우라면 테이블이 마지막으로 폴링된 시간을 추적하고 모든 요청에 ​​대해 테이블을 다시 폴링할 만큼 충분한 시간이 경과했는지 확인할 수 있습니다.

데이터베이스 관리에 대한 액세스 권한이 있는 경우 SQL Server에 스케줄러가 있습니다.권한이 있는 경우 쿼리, 저장 프로시저를 실행하고 프로세스를 시작할 수도 있습니다(그러나 공유 호스팅에서는 거의 불가능함).

특정 간격으로 코드가 필요하고 이를 예약하거나 서비스로 실행하기 위해 서버에 액세스할 수 없거나 SQL Server 스케줄러를 사용할 수 없는 경우에는 불가능합니다.

애플리케이션 풀을 "항상 활성화"하고 스레드로 원하는대로 수행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top