从 WCF 服务异步调用方法并立即返回

本文关键字:返回 方法 调用 WCF 服务 异步 | 更新日期: 2023-09-27 18:37:06

第三方正在调用我们的 WCF 服务。呼叫者希望在短时间内确认已收到并存储已发送的记录。

存储的记录需要一些长时间的处理。是否可以在存储记录后立即异步执行处理,以便可以立即发送确认?

当然,可以有一个单独的进程来执行处理,但问题是我是否可以在不超时的情况下将存储和处理结合起来。

更新:
看起来这是有效的:

var aTask = new Task(myService.TheMethod);
aTask.Start();
return aVariableAsync;

或者从我的 WCF 主机中这样做是一个非常糟糕的主意,因为.. ?

从 WCF 服务异步调用方法并立即返回

您可以在 OperationContract 属性上将"AsyncPattern"设置为 true,如 MSDN 中所述。

然后,您可以使用服务方法上的以下属性控制并发:

[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
    }