我目前正在開發一個REST服務,其中一種方法是長時間運行的任務(名爲CalculatePrimeOneWay)。它的定義是WCF REST服務和狀態輪詢
[OperationContract(IsOneWay = true)]
[WebInvoke(Method = "POST", UriTemplate = "primeoneway/{jobnumber}")]
void CalculatePrimeOneWay(string jobnumber, Prime prime);
由於不存在與REST服務沒有回調的能力,我認爲有關實現一種輪詢方法來獲取狀態信息。此輪詢方法定義爲
[OperationContract]
[WebGet(UriTemplate = "poll/{jobnumber}")]
Job GetJobStatus(string jobnumber);
我將狀態信息寫入MS SQL表。
我啓動我的客戶端並調用CalculatePrimeOneWay方法。隨後對GetJobStatus的調用返回帶有協議錯誤,狀態碼400和狀態描述錯誤請求的WebException。 但是,如果CalculatePrimeOneWay完成,然後我調用GetJobStatus,所有工作都很好。
爲什麼我無法在CalculatePrimeOneWay仍在運行時調用GetJobStatus? 對於長時間運行任務和輪詢機制的情況,還有哪些其他解決方案可能?
感謝
_「我的長時間運行任務和輪詢機制的場景有什麼其他解決方案?」 - 您是否嘗試搜索?讓一個HTTP調用的持續時間超過幾毫秒從來都不是一個好主意。 – CodeCaster
我沒有搜索互聯網,我發現的唯一可能的想法是這種輪詢機制。由於長時間運行的方法被定義爲OneWay,所以HTTP調用本身完成得非常快,我也可以在我的日誌中看到。 –
你在使用per-session/singleton實例嗎?或者您是否重新使用客戶頻道?或兩者? –