2010-03-18 154 views
2

在完成对WCF服务的异步调用之后,我希望将成功消息设置为会话并向用户显示通知。ASP.NET MVC异步调用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方法中无法设置通知,因此会话= null。

 
client.BeginGetData(id, GetDataCallback, client); 
private void GetDataCallback(IAsyncResult ar) 
{ 
    string name = ((ServiceReference1.Service1Client)ar.AsyncState).EndGetData(ar); 
    this.SetNotification(new Notification() { Message = name, Type = NotificationType.Success }); 
} 

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

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

回答

0

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

另外,我使用AsyncController,尽管没有工作线程,这本身是不够的。

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

我用这个作为指导,但仍然需要线程池。

干杯

+0

TNX,我们会尽力。 – 2010-12-02 14:19:14