문제

사용자로부터 데이터를 수집하여 타사 웹 서비스에 제출하는 ASP.NET 웹 사이트를 구축하고 있습니다. 웹 서비스는 다소 신뢰할 수 없으며 이러한 이유로 백업 서비스가 있습니다.

기본 서비스에 대한 호출이 실패한 경우 (시간 초과 또는 다른 오류) 정적 클래스에서 약간 뒤집어 시스템을 사용하여 보조 서비스를 사용해야합니다.

이 시점에서, 나는 기본 서비스 (더미 데이터 포함)를 폴링하여 백업되었는지 확인해야합니다 (이 시점에서 확인 코드를 받게됩니다). 이 시점에서 웹 사이트가 기본 서비스를 다시 사용하기 시작하도록 비트를 뒤로 뒤집어 야합니다.

나는 이것을 읽었다 Windows 서비스 나 ASP.NET 배경 스레드를 사용해야합니까? 그리고 코드를 Windows 서비스로 분리하는 것은 폴링을 수행하는 가장 깨끗한 방법이라고 생각하지만 웹 appication과 어떻게 통신 할 것인가?

내가 생각한 한 가지 생각 중 하나는 Windows 서비스가 WebApp에 통신하는 데 사용할 수있는 웹 서비스를 노출시키는 것입니다. 그러나 이것은 지저분하고 지나친 것 같습니다.

비슷한 작업을 수행하는 귀하의 생각과 경험에 감사드립니다.

감사

도움이 되었습니까?

해결책

나는 Windows 서비스가 갈 길이라고 생각합니다.

서비스와 웹 사이트 간의 커뮤니케이션과 관련하여 가장 좋은 답변은 솔루션의 크기와 규모에 따라 다릅니다. 신뢰할 수 있어야 할 것을 구축하는 경우 ASP.NET 사이트와 Windows 서비스간에 일종의 대기열을 구현하는 것이 좋습니다. 예산과 능력에 따라 Biztalk, MSMQ 및 SQL Server 대기열 (SSIS)에 따라 많은 옵션이 있습니다. 또는 더 작은 규모를 찾고 있다면 어딘가에 데이터베이스 테이블에 넣는 것이 좋습니다.

파일 잠금 및 멀티 스레딩에 문제가 발생하기 때문에 파일 시스템에서 파일을 사용하지 않습니다. 또한 서비스가 실패하면 메모리 내 대기열을 잃을 위험이 있기 때문에 서비스와 직접 의사 소통하는 것을 피할 수 있습니다.

추가하기 위해 편집 :

여기서 신뢰성이 문제가되지 않으면 웹 사이트와 Windows 서비스 간의 커뮤니케이션을 위해 WPF 명명 된 파이프 호스팅 서비스를 사용할 수 있습니다. 이것은 클래식 웹 서비스에 일반적으로 관여하는 많은 오버 헤드를 피하며 놀랍게도 빠릅니다. 유일한 다운 측면은 셀프 호스팅 WPF 서비스가 까다 롭고 서비스를 유지하기가 어려울 수 있다는 것입니다.

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