我有一個長時間的運行操作,您可能會在我的另一個問題(這裏您的參考是first和second)中讀到。在一個控制器方法中運行異步操作,並在另一個控制器方法中獲取該操作的結果
在整個交易開始時,項目公開了一個表單,用戶應該在其中指定關於XML文件的所有必要信息並上傳XML文件本身。在該方法中,所有用戶輸入數據都被捕獲並轉到處理文件之王的WCF服務。控制器只獲得了這種處理的任務ID。 然後用戶被重定向到進度條頁面並定期檢索任務完整性的狀態,刷新進度條。
所以這裏是我的問題來了。如果結束處理XML文件,如何獲取結果並將結果顯示給用戶?
我知道HTTP是無狀態協議,但有cookie機制可以幫助在這種情況下。當然,我可能會將處理結果保存到某個臨時位置,例如WCF服務器中的靜態類,但服務的負載很高,因此它會佔用所有提供的內存。
換句話說,我想將任務傳遞給WCF服務(使用netNamedPipeBinding)並儘可能快地接收結果。我想將臨時保存結果轉移到某個緩衝區,並等待客戶端將其收回。
至於我走的是使用不服務的一面,但在客戶端的臨時緩衝區:
using (XmlProcessingServiceClient client = new XmlProcessingServiceClient())
{
client.AnalyzeXmlAsync(new Task { fileName = filePath, id = tid });
client.AnalyzeXmlCompleted += (sender, e) =>
{
System.Web.HttpContext.Current.Application.Lock();
// here is I just use single place for all clients. I know it is not right, it is just for illustrating purposes.
System.Web.HttpContext.Current.Application["Result"] = e;
System.Web.HttpContext.Current.Application.UnLock();
};
}
你有沒有考慮過使用[SignalR](http://signalr.net/) – Jupaol