문제

저는 현재 특정 요구 사항이 있는 프로젝트를 진행하고 있습니다.이에 대한 간략한 개요는 다음과 같습니다.

  • 데이터는 외부 웹 서비스에서 검색됩니다.
  • 데이터는 SQL 2005에 저장됩니다.
  • 데이터는 웹 GUI를 통해 조작됩니다.
  • 웹 서비스와 통신하는 Windows 서비스는 데이터베이스를 통하는 경우를 제외하고는 내부 웹 UI와 연결되지 않습니다.
  • 웹 서비스와의 통신은 시간 기반이어야 하며 웹 UI에 대한 사용자 개입을 통해 트리거되어야 합니다.

웹 서비스 통신 트리거링을 위한 현재(프로덕션 전) 모델은 수동 개입으로 생성된 트리거 요청을 저장하는 데이터베이스 테이블을 통해 이루어집니다.실제로 여러 트리거 메커니즘을 갖고 싶지는 않지만 호출 시간을 기반으로 하는 트리거로 데이터베이스 테이블을 채울 수 있기를 원합니다.내가 보기에 이를 수행하는 방법에는 두 가지가 있습니다.

1) 두 개의 추가 매개변수를 저장하도록 트리거 테이블을 조정합니다.하나는 "이 시간 기반이거나 수동으로 추가됩니까?" 타이밍 세부 사항을 저장하는 무효가없는 필드 (정확한 형식 결정).수동으로 생성된 트리거인 경우 트리거가 실행될 때 처리된 것으로 표시하지만 시간이 지정된 트리거인 경우에는 표시하지 않습니다.
또는
2) 시간 간격에 따라 즉시 트리거를 생성하는 두 번째 Windows 서비스를 만듭니다.

두 번째 옵션은 나에게 퍼지처럼 보이지만 옵션 1의 관리는 프로그래밍의 악몽으로 쉽게 변할 수 있습니다. (테이블의 마지막 폴링이 실행해야 하는 이벤트를 반환했는지 어떻게 알 수 있으며, 그런 다음 어떻게 중지합니까? 다음 투표에서 다시 트리거됨)

누군가가 몇 분만 시간을 내어 어떤 경로(이 두 경로 중 하나 또는 목록에 없는 세 번째 경로)를 선택할지 결정하는 데 도움을 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

Windows 서비스 대신 SQL 작업을 사용하면 어떨까요?저장 프로시저에 모든 db "트리거" 코드를 캡슐화할 수 있습니다.그런 다음 UI 및 SQL 작업은 동일한 저장 프로시저를 호출하고 수동으로든 시간 간격으로든 동일한 방식으로 트리거를 만들 수 있습니다.

다른 팁

내가 보는 방식은 이것이다.

스케줄러 역할을 하는 Windows 서비스가 있고 그 안에는 단순히 웹 서비스를 호출하고 데이터베이스에 데이터를 저장하는 일부 클래스가 있습니다.

따라서 WebUI에서 직접 이러한 클래스를 사용하고 WebUI 트리거를 기반으로 데이터를 가져올 수도 있습니다.

나는 사용자가 생성한 작업을 데이터베이스에 플래그(트리거)로 저장하여 일부 서비스가 해당 작업을 실행하기 위해 이를 폴링(사용자가 제어할 수 없는 간격으로)하는 아이디어를 좋아하지 않습니다.

전체 코드를 exe로 변환한 다음 Windows 스케줄러를 사용하여 예약할 수도 있습니다.그리고 사용자가 웹 UI에서 작업을 트리거할 때마다 동일한 exe를 호출합니다.

@Vaibhav

안타깝게도 솔루션의 물리적 아키텍처에서는 웹 UI에서 데이터베이스로, 데이터베이스에서 서비스(웹 서비스를 호출할 수 있음) 이외의 구성 요소 간의 직접적인 통신을 허용하지 않습니다.그러나 여기서는 커뮤니케이션 수업을 재사용하는 것이 이상적이라는 점에는 동의합니다. 비즈니스 범위 내에서는 그렇게 할 수 없습니다*

*기술적으로 "더 나은" 솔루션이 외부 요인에 의해 방해를 받는 경우가 항상 있지 않나요?

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