2011-08-26 3 views
4

다음 요구 사항이 있습니다.
(1) 사용자가 요청할 때 '작업 A'를 수행하십시오.
(2) 사용자가 요청하지 않아도 동일한 '작업 A'를 하루에 두 번 수행하려고합니다.WCF를 자동으로 예약 할 수 있습니까?


나는 행동 A을 수행하는 방법 XYZ이있는 WCF 웹 서비스가있다. 사용자가 요청할 때 XYZ 메서드가 호출됩니다.

이제는 (이 서비스를 호스팅 할 수있는) 윈도우 서비스를 만들거나 proxy을 만들지 않고도이 작업을 예약 할 수 있습니까?

사용자 요청으로 작업을 수행하고 하나의 응용 프로그램 만 사용하여 동일한 작업을 예약하는 방법이 있습니까?

+0

온라인 예약 서비스를 사용해 보셨습니까? – Kizz

답변

6

아니요, WCF는 자동으로 예약 할 수 없습니다. 예약 된 작업 (Scheduling jobs on windows 참조), 타이머가있는 Windows 서비스 (내가 올바르게 이해하면 원하지 않는다고 말했던 것) 또는 타이머가있는 다른 응용 프로그램을 구현해야합니다.

다른 답변과 마찬가지로 스레드를 시작할 수 있지만 서비스 호출 자체에 의존합니다. 다른 프로세스에서 외부 호출하는 것이 좋습니다.

예약 된 작업은 실행 파일을 실행할 수 있습니다. WCF 서비스를 호출하고 결과를 기록한 다음 (필요한 경우) 완료하는 콘솔 응용 프로그램을 작성할 수 있습니다.

저는 일반적으로 Windows 서비스를 통해 이러한 유형의 타이머를 구현하는 것을 선호합니다. Windows 서비스를 모니터링하고 로그를 기록 할 수 있고 자동 시작/자동 다시 시작할 수 있기 때문입니다. 설치하면 작동합니다. Windows 서비스를 사용하고 싶지 않으면 작업을 예약합니다.

+0

WCF에서 타이머를 사용하는 것이 좋은 방법입니까? IIS에 배포해야하는 경우 –

4

일반적으로 일종의 작업 스케줄러에서 WCF 서비스 메서드를 호출하면됩니다. 정말 간단한 형태로, WCF 메소드를 주기적으로 실행하는 서비스로부터 Thread를 생성 할 수 있습니다. 다시 말하지만 이것은 가장 좋은 해결책은 아니지만 입증하기가 가장 쉽습니다. ,

Thread t = new Thread(new ThreadStart(CallService)); 
t.Start(); 

... 

// this will call the WCF service method once every hour 
public void CallService() 
{ 
    Thread.Sleep(3600000); // sleep 1 hour 
    new SomeClass().SomeServiceMethod(); 
} 

이 그것을 할 수있는 한 가지 방법은 아니지만 가장 좋은 방법,하지만 : 당신은 응용 프로그램 시작 어딘가에 그런 ... 너무 이렇게

[ServiceContract] 
public class SomeClass 
{ 
    [ServiceOperation] 
    public void SomeServiceMethod() { ... } 

를 다른 스케줄러 라이브러리를 사용할 수 있습니다 기본적으로 응용 프로그램의 다른 메서드와 마찬가지로 WCF 서비스 메서드를 호출 할 수 있습니다.

관련 문제