Silverlight WCF RIA服务(二十四)Silverlight 客户端 5

Silverlight WCF RIA服务(二十四)Silverlight 客户端 5,第1张

概述在客户端处理错误 当我们在客户端检索或修改数据时,我们通常需要处理错误和对错误做出反应。通过WCF RIA Services,我们为数据 *** 作提供一个回调方法来处理错误,并且在回调方法里检查错误。使用回调方法是必需的,因为调用数据 *** 作都是异步的,比且异常也是异步抛出的。默认下,对域 *** 作中的所有错误都抛出一个异常。RIA Services为我们提供了处理错误的方式,并且可以指定框架不抛出异常。 当装载

在客户端处理错误
当我们在客户端检索或修改数据时,我们通常需要处理错误和对错误做出反应。通过WCF RIA Services,我们为数据 *** 作提供一个回调方法来处理错误,并且在回调方法里检查错误。使用回调方法是必需的,因为调用数据 *** 作都是异步的,比且异常也是异步抛出的。默认下,对域 *** 作中的所有错误都抛出一个异常。RIA Services为我们提供了处理错误的方式,并且可以指定框架不抛出异常。

当装载数据时处理错误
当从一个查询装载数据时,我们可以选择处理错误或忽略之。明确地,我们从如下选项中选择:

1. 使用带有回调方法做为参数的Load方法。在回调方法内,处理错误,并调用MarkErrorAsHandled方法来指定不要抛出错误。

2. 使用带一个名为thowOnError的Boolean参数的Load方法。当调用Load方法时,设置throwOnError为false来指定我们不想为查询错误抛出异常。

3. 当Load方法没有回调参数和布尔参数时,任何查询错误都会导致一个未处理的异常。
下面的示例演示了如何从查询载入数据,并指定一个回调方法来检测装载 *** 作中的错误。
 

?
1 2 3 4 5 6 @H_419_46@ 7 8 9 10 11 12 13 14 15 16 17 18 19 20 private @H_301_83@CustomerDomainContext _customerContext = new @H_301_83@ CustomerDomainContext();   public @H_301_83@MainPage() @H_301_83@{     @H_301_83@InitializeComponent();   @H_419_46@     @H_301_83@LoadOperation<CUSTOMER> loadOp = this@H_301_83@._customerContext.Load(this@H_301_83@._customerContext.GetCustomersquery(),OnLoadCompleted,null@H_301_83@);     @H_301_83@CustomerGrID.ItemsSource = loadOp.EntitIEs; @H_301_83@}   private voID @H_301_83@OnLoadCompleted(LoadOperation<CUSTOMER> lo) @H_301_83@{     if @H_301_83@(lo.HasError)     @H_301_83@{         @H_301_83@MessageBox.Show(string@H_301_83@.Format("RetrIEving data Failed: {0}"@H_301_83@,lo.Error.Message));         @H_301_83@lo.MarkErrorAsHandled();     @H_301_83@} @H_301_83@}



提交数据时处理错误
当提交数据时,我们不能像Load方法那样选择关闭异常。所有提交数据时发生的错误都会导致一个异常。明确地,我们可以选择如下选项:

1. 使用带回调参数的submitChanges方法。在回调方法里,处理错误并调用MarkErrorAsHandled方法来指定不要抛出异常。

2. 使用submitChanges方法,所有在提交数据时发生的错误都导致一个异常。

下面的示例演示了如何调用带有回调参数的submitChanges方法。
 

?
1 2 3 4 5 6 @H_419_46@ 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 private voID @H_301_83@Savebutton_Click(object @H_301_83@sender,RoutedEventArgs e) @H_301_83@{     @H_301_83@_customerContext.submitChanges(OnsubmitCompleted,null@H_301_83@); @H_301_83@}   private voID @H_301_83@Rejectbutton_Click(object @H_301_83@sender,RoutedEventArgs e) @H_419_46@ @H_301_83@{     @H_301_83@_customerContext.RejectChanges();     @H_301_83@CheckChanges(); @H_301_83@}   private voID @H_301_83@CustomerGrID_RowEditEnded(object @H_301_83@sender,DataGrIDRowEditEndedEventArgs e) @H_301_83@{     @H_301_83@CheckChanges(); @H_301_83@}   private voID @H_301_83@CheckChanges() @H_301_83@{     @H_301_83@EntityChangeSet changeSet = _customerContext.EntityContainer.GetChanges();     @H_301_83@ChangeText.Text = changeSet.ToString();       bool @H_301_83@hasChanges = _customerContext.HasChanges;     @H_301_83@Savebutton.IsEnabled = hasChanges;     @H_301_83@Rejectbutton.IsEnabled = hasChanges; @H_301_83@}   private voID @H_301_83@OnsubmitCompleted(submitOperation so) @H_301_83@{     if @H_301_83@(so.HasError)     @H_301_83@{         @H_301_83@MessageBox.Show(string@H_301_83@.Format("submit Failed: {0}"@H_301_83@,so.Error.Message));         @H_301_83@so.MarkErrorAsHandled();     @H_301_83@}     @H_301_83@CheckChanges(); @H_301_83@}



调用 *** 作时处理错误
当调用一个 *** 作时,我们有像提交数据时一样的选择。如下:

1. 当调用 *** 作时包含一个回调参数。在回调参数内处理错误,并调用MarkErrorAsHandled方法来指定不要抛出异常。

2. 调用不包含回调参数的 *** 作。所有在调用 *** 作时发生的错误都会抛出异常。

 

?
1 2 3 4 5 6 @H_419_46@ 7 8 9 10 11 12 13 14 15 16 @H_301_83@InvokeOperation<INT> invokeOp = customerContext.GetLocalTemperature(selectedPostalCode,OnInvokeCompleted,null@H_301_83@);   private voID @H_301_83@OnInvokeCompleted(InvokeOperation<INT> invOp) @H_301_83@{   if @H_301_83@(invOp.HasError)   @H_301_83@{ @H_419_46@     @H_301_83@MessageBox.Show(string@H_301_83@.Format("Method Failed: {0}"@H_301_83@,invOp.Error.Message));     @H_301_83@invOp.MarkErrorAsHandled();   @H_301_83@}   else   @H_301_83@{     @H_301_83@result = invokeOp.Value;   @H_301_83@} @H_301_83@}



验证服务处理错误
AuthenticationService类允许我们在调用下面的方法时提供回调参数:
1.LoadUser 2.Login 3.logout 4.SaveUser
在回调方法中,我们可以提供代码来处置从验证服务中来的错误。 下面的例子演示如何从登陆按钮的事件处理中调用Login方法。
 

?
1 2 3 4 5 6 @H_419_46@ 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 private voID @H_301_83@Loginbutton_Click(object @H_301_83@sender,RoutedEventArgs e) @H_301_83@{     @H_301_83@LoginParameters lp = new @H_301_83@ LoginParameters(Username.Text,Password.Password);     @H_301_83@WebContext.Current.Authentication.Login(lp,this@H_301_83@.Loginoperation_Completed,null@H_301_83@);     @H_301_83@Loginbutton.IsEnabled = false@H_301_83@;     @H_301_83@LoginResult.Text = ""@H_301_83@; @H_419_46@ @H_301_83@}   private voID @H_301_83@Loginoperation_Completed(Loginoperation lo) @H_301_83@{     if @H_301_83@(lo.HasError)     @H_301_83@{         @H_301_83@LoginResult.Text = lo.Error.Message;         @H_301_83@LoginResult.Visibility = System.windows.Visibility.Visible;         @H_301_83@lo.MarkErrorAsHandled();     @H_301_83@}     else if @H_301_83@(lo.LoginSuccess == false@H_301_83@)     @H_301_83@{         @H_301_83@LoginResult.Text = "Login Failed. Please check user name and password."@H_301_83@;         @H_301_83@LoginResult.Visibility = System.windows.Visibility.Visible;     @H_301_83@}     else if @H_301_83@(lo.LoginSuccess == true@H_301_83@)     @H_301_83@{         @H_301_83@SetControlVisibility(true@H_301_83@);     @H_301_83@}     @H_301_83@Loginbutton.IsEnabled = true@H_301_83@; @H_301_83@}
总结

以上是内存溢出为你收集整理的Silverlight WCF RIA服务(二十四)Silverlight 客户端 5全部内容,希望文章能够帮你解决Silverlight WCF RIA服务(二十四)Silverlight 客户端 5所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1065751.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存