2010-03-18 185 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