C# ASP.NET MVC 4 Web API:如何异步处理需要从异步WCF服务回调提取结果的请求
假设我使用ASP.NET MVC 4实现了一个Web服务,该Web服务具有一个公开一种方法的控制器:C# ASP.NET MVC 4 Web API:如何异步处理需要从异步WCF服务回调提取结果的请求,c#,asp.net,asp.net-mvc,wcf,asynchronous,C#,Asp.net,Asp.net Mvc,Wcf,Asynchronous,假设我使用ASP.NET MVC 4实现了一个Web服务,该Web服务具有一个公开一种方法的控制器: Response Process(Request request); 此Web服务与中间层服务通信以处理请求。中间层服务合约服务如下所示: [ServiceContract(CallbackContract=typeof(IServiceCallback))] interface IService { [OperationContract(IsOneWay=true)] voi
Response Process(Request request);
此Web服务与中间层服务通信以处理请求。中间层服务合约服务如下所示:
[ServiceContract(CallbackContract=typeof(IServiceCallback))]
interface IService
{
[OperationContract(IsOneWay=true)]
void Process(Request request);
}
interface IServiceCallback
{
[OperationContract(IsOneWay=true)]
void Processed( Response response );
}
此服务通过匹配的Process/Processed方法异步处理请求
从web服务异步调用此中间层服务的最佳方式是什么?当回调方法在不同的工作线程中返回时,我很难看到如何从回调线程获取响应以返回到调用客户机
感谢您提供的帮助。您必须使用async并等待。阅读此链接
在您的呼叫代码中尝试此功能
public void DoStuff()
{
using(var proxy = new Proxy())
{
var result = await proxy.Process();
Task.Run(() => Processed(result));
}
}
或者这个…它与.NET4一起工作
public void DoStuff()
{
using(var proxy = new Proxy())
{
proxy.Process().ContinueWith(result => Processed(result), TaskCreationOptions.None);
}
}
您正在运行哪个版本的.net?为什么要使用回调而不仅仅是返回值?为什么要使用IsOneWay?您知道WCF代理创建支持创建运行4.0的
BeginXXX
和EndXXX
代理,但我可以升级到4.5。该中间层服务是很久以前创建的,其他服务依赖于它,因此我无法更改接口,即使用WCF AsyncPattern=true。我已经阅读了async并等待,但我正在努力解决的是如何实现在不同线程中发送和接收响应的async方法。e、 公共异步任务进程(请求){u proxy.Process(请求);//现在怎么办?响应对象将在不同的线程中返回。