簡體   English   中英

從WCF服務調用方法異步並立即返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM