【问题标题】:ASP.NET MVC async call a WCF serviceASP.NET MVC 异步调用 WCF 服务
【发布时间】:2023-03-26 12:23:01
【问题描述】:

在完成对 WCF 服务的异步调用后,我想将成功消息设置到会话中并向用户显示通知。

我尝试使用两种方式来完成这个操作。

1) 基于事件的模型。

client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(GetDataCompleted);
client.GetDataAsync(id, client);
private void GetDataCompleted(object obj, GetDataCompletedEventArgs e) 
{
   this.SetNotification(new Notification() { Message = e.Result, Type =    NotificationType.Success });
}

在 MyOperationCompleted 事件中,我可以将通知设置为 HttpContext.Current.Session,但我必须等待此操作完成并且无法导航到其他页面。

2) IAsyncResult 模型。 这样我可以导航到其他页面并对 wcf 服务进行异步调用,但是在 GetDataCallback 方法中无法设置通知,因为 session = null。

client.BeginGetData(id, GetDataCallback, client); 私人无效GetDataCallback(IAsyncResult ar) { 字符串名称 = ((ServiceReference1.Service1Client)ar.AsyncState).EndGetData(ar); this.SetNotification(new Notification() { Message = name, Type = NotificationType.Success }); }

启用服务引用中的“生成异步操作”。

请帮我解决这个问题。谢谢。

【问题讨论】:

    标签: asp.net-mvc wcf asynchronous callback


    【解决方案1】:

    我不是 wcf 专家,但我发现可以在 ThreadPool.QueueUserWorkItem 中包装您对方法的异步版本的调用。没有这个,我有同样的阻塞问题。所以这似乎释放了你的 asp mvc 中的主线程以继续前进,而另一个工作线程等待回调。

    此外,我使用了 AsyncController,尽管没有工作线程,仅此一项是不够的。

    看到这个:http://msdn.microsoft.com/en-us/library/ee728598.aspx

    我以此为指导,但仍需要 ThreadPool。

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2012-10-03
      • 2016-12-02
      • 2020-01-21
      • 2018-09-07
      相关资源
      最近更新 更多