2010-06-18 71 views
0

一些挖掘到的異常處理在Silverlight和閱讀一些有益的博客這樣 Silverlight exception handling using WCF RIA Services and WCF Services我最終實現在App.xaml.cs類似的想法,以顯示錯誤頁面後並調用另一個WCF服務方法的錯誤記錄到事件查看器:如何停止正在運行的WCF服務在Silverlight中,當發生異常

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
    { 
     if (!System.Diagnostics.Debugger.IsAttached) 
     { 
      var errorPage = new Error(); 
      errorPage.Show(); 

      string errorMsg = string.Format("{0} {1}", e.ExceptionObject.Message, e.ExceptionObject.StackTrace); 
      EventHandler<WriteIntoEventLogCompletedEventArgs> callback = (s, ev) => 
      { 
       bool result = ev.Result; 
      }; 
      (new ServiceProxy<ApplicationServiceClient>()).CallService<WriteIntoEventLogCompletedEventArgs>(callback, errorMsg); 

      e.Handled = true; 
     } 
    } 

,這就是我在Error.xaml.cs:

private void OKButton_Click(object sender, RoutedEventArgs e) 
{ 
     this.DialogResult = true; 
} 

,基本上將關閉時的錯誤頁面用戶點擊確定。

一切工作正常大多數情況下。當wcf服務的回調之一導致異常時,問題發生。錯誤頁面將很好地顯示,當用戶單擊確定,錯誤頁面將被關閉。但是背景仍然顯示忙指標,原始服務回調仍在等待響應。我需要以某種方式終止它。

如果有人能幫上忙,我會很感激。

感謝, 實

-

非常感謝您有所幫助reply.I使用同樣的想法,並在原有的服務回調方法添加代碼,以檢查e.Error如果是不是null,關閉窗口(這是一個子窗口)與busyindicator,現在一切正常。再次感謝。 Sil

回答

0

我的猜測是原始服務回調可能正在完成,但是處於錯誤狀態。您可能需要檢測錯誤情況並將busyindicator的IsBusy屬性設置爲False。

幾件事情要檢查

  • 是原來的服務回調ATLEAST成功返回?您可以通過將斷點放入原始服務回調方法來檢查此問題。

  • 您是否正確處理了回調方法中的錯誤情況。例如 -


void proxy_GetUserCompleted(object sender, GetUserCompletedEventArgs e) 
    { 
     if (e.Error != null) 
     { 
      getUserResult.Text = "Error getting the user."; 
     } 
     else 
     { 
      getUserResult.Text = "User name: " + e.Result.Name + ", age: " + e.Result.Age + ", is member: " + e.Result.IsMember; 
     } 
    } 

參考 - http://msdn.microsoft.com/en-us/library/cc197937(v=VS.95).aspx

相關問題