我有以下要求:
(1)當用戶請求時執行「操作A」。
(2)即使用戶不請求,我們也希望在一天內執行兩次相同的「操作A」。
WCF可以自動計劃嗎?
我有具有方法XYZ執行動作A
一個WCF
web服務。方法XYZ將在用戶請求時調用。
現在問題是,我可以安排此操作而無需創建窗口服務(可以託管此服務)或創建proxy
?
有沒有一種方法可以通過用戶請求執行某個操作,並只使用一個應用程序來安排相同的操作?
我有以下要求:
(1)當用戶請求時執行「操作A」。
(2)即使用戶不請求,我們也希望在一天內執行兩次相同的「操作A」。
WCF可以自動計劃嗎?
我有具有方法XYZ執行動作A
一個WCF
web服務。方法XYZ將在用戶請求時調用。
現在問題是,我可以安排此操作而無需創建窗口服務(可以託管此服務)或創建proxy
?
有沒有一種方法可以通過用戶請求執行某個操作,並只使用一個應用程序來安排相同的操作?
不,WCF不能自動調度。您需要實現計劃任務(請參閱Scheduling jobs on windows),帶有計時器的Windows服務(如果我理解正確,您說您不想這樣做)或使用計時器的其他應用程序。
您可以根據其他答案啓動線程,但這依賴於您的服務調用自己 - 我寧願從另一個進程調用它的外部。
計劃任務可以運行可執行文件。您可以編寫一個調用您的WCF服務的控制檯應用程序,記錄任何結果(如有必要),然後完成。
我通常更喜歡通過Windows服務實現這種類型的計時器,只是因爲Windows服務可以被監控,可以登錄,並且可以自動啓動/自動重新啓動 - 安裝它並且它「正常工作」。如果我不想使用Windows服務,那麼我會安排一項任務。
這是在WCF中使用計時器的好方法嗎?如果我們必須在IIS上部署它。 –
我通常通過從某種任務調度程序調用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服務方法。
您是否嘗試過在線調度服務? – Kizz