【问题标题】:how to call wcf service asynchronously from MVC4's controller如何从 MVC4 的控制器异步调用 wcf 服务
【发布时间】:2014-06-04 06:52:22
【问题描述】:

我创建了一个具有 WCF 服务和客户端异步使用它的项目

(就像http://msdn.microsoft.com/en-us/library/bb885132.aspx中的那个)

如果客户端是 MVC4,问题就来了

当我从客户端调用 wcf 时,代码是

      ChannelFactory<IMathService> myChannelFactory = 
     new ChannelFactory<IMathService>(myBinding, myEndpoint);

        myChannelFactory.Open();
        IMathService instance = myChannelFactory.CreateChannel();
        // Call Service.

        IAsyncResult ar = instance.BeginFunction(param,
            (are) =>
            {
                result = ((IMathService)are.AsyncState).EndFunction(are);
            }
            , instance);

        return View(result);

使用此代码,我的“结果”始终是默认值。

如何让操作等到结果具有来自 EndFunction 的值?

谢谢

【问题讨论】:

    标签: wcf asp.net-mvc-4 asynchronous


    【解决方案1】:

    您需要使用 ASP .NET MVC AsyncController

    完整解释-http://msdn.microsoft.com/en-us/library/ee728598(v=vs.98).aspx

    为您的场景编辑示例-

    public class PortalController : AsyncController {
    public void NewsAsync(string city) {
    
        AsyncManager.OutstandingOperations.Increment();
    
    
              ChannelFactory<IMathService> myChannelFactory = 
     new ChannelFactory<IMathService>(myBinding, myEndpoint);
    
        myChannelFactory.Open();
        IMathService instance = myChannelFactory.CreateChannel();
        // Call Service.
    
        IAsyncResult ar = instance.BeginFunction(param,
            (are) =>
            {
                AsyncManager.Parameters["result"] = ((IMathService)are.AsyncState).EndFunction(are);
                AsyncManager.OutstandingOperations.Decrement();
            }
            , instance);
    }
    
    public ActionResult NewsCompleted(string[] result) {
        return View(result);
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      相关资源
      最近更新 更多