[英]Calling method async from WCF service and return immediately
第三方正在致電我們的WCF服務。 呼叫者希望在短時間內確認已發送的記錄已被接收並存儲。
存儲的記錄需要一些冗長的處理。 可以在存儲記錄后立即執行異步處理,以便可以立即發送確認嗎?
當然,可以有一個單獨的進程來執行處理,但是問題是我是否可以在不超時的情況下將存儲和處理結合起來。
更新:
看起來像這樣:
var aTask = new Task(myService.TheMethod);
aTask.Start();
return aVariableAsync;
還是在我的WCF主機中執行此操作是一個非常糟糕的主意,因為..?
您可以按照MSDN上的說明在OperationContract屬性上將“ AsyncPattern”設置為true。
然后,可以在服務方法上使用以下屬性來控制並發性:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
是的,它可以做到。 我沒有大量的經驗,但這是一些顯示該代碼的片段。 服務在控制器上調用此方法,該方法將xml消息保存到硬盤驅動器,然后啟動一個單獨的任務以將其處理到MongoDB中,並將消息返回到已成功保存的服務。
public string SaveTransaction(XElement pTransactionXml, string pSavePath)
{
//save the transaction to the drive locally
pTransactionXml.Save(pSavePath);
...
var mongoTask = Task.Run(async () =>
{
await SendXMLFilesToMongo(pSavePath);
});
return response.WithResult("Successfully saved to disk.");
}
public virtual async Task<int> SendXMLFilesToMongo(string pSavePath)
{
//call the code to save to mongo and do additional processing
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.