Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 4 Web API:如何异步处理需要从异步WCF服务回调提取结果的请求_C#_Asp.net_Asp.net Mvc_Wcf_Asynchronous - Fatal编程技术网

C# ASP.NET MVC 4 Web API:如何异步处理需要从异步WCF服务回调提取结果的请求

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

假设我使用ASP.NET MVC 4实现了一个Web服务,该Web服务具有一个公开一种方法的控制器:

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(请求);//现在怎么办?响应对象将在不同的线程中返回。