第三方正在调用我们的WCF服务。呼叫者希望确认,已经在很短的时间内收到并存储了发送的记录。
存储的记录需要一些长度处理。在存储记录之后,处理是否可以异步执行,因此可以立即发送确认信息?
当然,可以有一个单独的流程来处理,但问题是我是否可以在没有超时的情况下组合存储和处理。
更新
它看起来像是有效的:
var aTask = new Task(myService.TheMethod);
aTask.Start();
return aVariableAsync;
或者在我的WCF主机中这是一个非常糟糕的主意,因为..?
答案 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
}