我有一個WCF服務操作,我想調用該操作來啓動一個長時間運行的方法,但是我希望該操作在長時間運行的方法之前返回其結果飾面。在wcf服務操作後調用方法返回了結果
我試過使用IParameterInspector實現,但操作的結果沒有返回給客戶端,直到長時間運行的方法完成。
我應該如何去實現這一點,因爲我從操作開始的任何事情似乎都必須在結果返回給客戶端之前完成?
謝謝。
我有一個WCF服務操作,我想調用該操作來啓動一個長時間運行的方法,但是我希望該操作在長時間運行的方法之前返回其結果飾面。在wcf服務操作後調用方法返回了結果
我試過使用IParameterInspector實現,但操作的結果沒有返回給客戶端,直到長時間運行的方法完成。
我應該如何去實現這一點,因爲我從操作開始的任何事情似乎都必須在結果返回給客戶端之前完成?
謝謝。
您不能在WCF中使用標準的請求/響應類型綁定來做到這一點,因爲正如您發現的,在服務完成處理(或超時)之前,您將不會得到響應。 要做你想做的事,你需要一個服務,你可以觸發長時間運行的操作,然後輪詢完成狀態&響應結果。
netMsmqBinding在WCF中支持這種情況。由於您只將消息放入隊列進行處理,因此此綁定的所有操作都必須是單向調用。您需要爲輪詢方法配置一個請求/響應綁定的另一個端點或服務。一個好的overview of the netMsmqBinding is here.
如果你想在服務器上做到這一點,看看http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/17/wcf-extensibility-ioperationinvoker.aspx,它顯示如何繞過操作(這是一個緩存場景,但它可以適應你的問題)。
如果您想在客戶端執行此操作,您可以簡單地異步調用操作,它將立即返回。當長時間運行完成時,您會收到一個通知(回調或事件),其結果已準備就緒。
這是一個有趣且可行的方法。我想我使用WCF擴展主要是爲了基礎設施類型職責。這在我看來更像是一個業務流程問題,所以我可能仍然會排隊等候。感謝參與,獲得不同的觀點總是很好的! – 2011-05-19 16:15:11
我看了看,並得到它的工作,非常感謝! – JPJY 2011-05-27 12:52:04
然後您可以將其標記爲答案:) – carlosfigueira 2011-05-27 14:23:21