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

时间:2016-03-02 15:00:51

标签: c# wcf parallel-processing task-parallel-library

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

存储的记录需要一些长度处理。在存储记录之后,处理是否可以异步执行,因此可以立即发送确认信息?

当然,可以有一个单独的流程来处理,但问题是我是否可以在没有超时的情况下组合存储和处理。

更新
它看起来像是有效的:

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

return aVariableAsync;

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

2 个答案:

答案 0 :(得分:0)

您可以设置" AsyncPattern"在on MSDN描述的OperationContract属性上为true。

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

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]

答案 1 :(得分:0)

是的,可以做到。我没有太多的经验,但这是一些代码的片段显示。该服务在控制器上调用此方法,该方法将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
    }
相关问题