2011-08-26 52 views
4

我有以下要求:
(1)當用戶請求時執行「操作A」。
(2)即使用戶不請求,我們也希望在一天內執行兩次相同的「操作A」。
WCF可以自動計劃嗎?

我有具有方法XYZ執行動作A一個WCF web服務。方法XYZ將在用戶請求時調用。

現在問題是,我可以安排此操作而無需創建窗口服務(可以託管此服務)或創建proxy

有沒有一種方法可以通過用戶請求執行某個操作,並只使用一個應用程序來安排相同的操作?

+0

您是否嘗試過在線調度服務? – Kizz

回答

6

不,WCF不能自動調度。您需要實現計劃任務(請參閱Scheduling jobs on windows),帶有計時器的Windows服務(如果我理解正確,您說您不想這樣做)或使用計時器的其他應用程序。

您可以根據其他答案啓動線程,但這依賴於您的服務調用自己 - 我寧願從另一個進程調用它的外部。

計劃任務可以運行可執行文件。您可以編寫一個調用您的WCF服務的控制檯應用程序,記錄任何結果(如有必要),然後完成。

我通常更喜歡通過Windows服務實現這種類型的計時器,只是因爲Windows服務可以被監控,可以登錄,並且可以自動啓動/自動重新啓動 - 安裝它並且它「正常工作」。如果我不想使用Windows服務,那麼我會安排一項任務。

+0

這是在WCF中使用計時器的好方法嗎?如果我們必須在IIS上部署它。 –

4

我通常通過從某種任務調度程序調用WCF服務方法來完成此操作。在一個非常簡單的表單中,你可以從你的服務中產生一個Thread,定期運行WCF方法。這不是最好的解決方案,但它最容易展示。你可以在應用程序啓動時使用一些其他的計劃程序庫做這個太...

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

然後某處:

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(); 
} 

這是爲了做這件事,雖然不是最好的方式,但基本上你可以像應用程序中的其他方法一樣調用WCF服務方法。