Silverlight与WCF错误处理:Server Not Found

Silverlight与WCF错误处理:Server Not Found,第1张

概述        在阅读本文前,你应该已经对Sl与WCF的编程模型有所了解。当使用WCF与Siverlight进行通信时,一旦服务端处理数据发生了异常,尽管Silverlight客户端可以使用 AsyncCompletedEventArgs.Error属性判断是否发生错误,但是由于默认情形下WCF的异常信息无法传递到客户端,这导致我们无法准确的判断错误的原因。       图1         关于  

      在阅读本文前,你应该已经对Sl与WCF的编程模型有所了解。当使用WCF与Siverlight进行通信时,一旦服务端处理数据发生了异常,尽管Silverlight客户端可以使用

AsyncCompletedEventArgs.Error属性判断是否发生错误,但是由于默认情形下WCF的异常信息无法传递到客户端,这导致我们无法准确的判断错误的原因。

     

图1

        关于这个问题,MSDN上已经对此进行了阐述:在 Silverlight 中创建和处理错误 ,这篇文章已经将原理解释的很清楚了。不过根据MSDN上的步骤,

在Sl应用程序中会遇到一些问题,本篇文章则带你按步实现Silverlight获取WCF的错误信息.

        1.建立Sl应用程序后,Web项目中添加Siverlight-enabled WCF Service模板

        

图2   

 

       2. 添加成功后,会自动为项目添加SilverlightFaultBehavior类,仔细看下SilverlightFaultBehavior类的实现,会发现它将http的状态码改为了200

       3.下面进行Web.Config的配置

         图中说明已经很清晰了,一共修改了4个地方,如果你是第一次做,可能每一个地方都要花费不少的时间去理解。如果includeExceptionDetailinFaults没有进行改动,也可以在服务契约的行为进行设置

     [ServiceContract(namespace = "")]
     [ServiceBehavior(IncludeExceptionDetailinFaults = true)]
     [SilverlightFaultBehavior]
     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
 public class WcfTestService
     {
     }
    

      4.现在Web.Config已经配置了,下面在 *** 作契约里抛出一个异常:

   [OperationContract]
 public voID DoWork()
   {
    throw new ApplicationException("发生了异常");
   }

      在浏览器中可以看到元数据后,就可以在客户端引用服务。

      5.调用该 *** 作,可以看到错误信息了:

 

       这篇文章,主要是通过手动配置的方式完成对异常信息的更改,对初学者麻烦了点.希望给有需要的人一点提示,下一篇将关注WCF的错误契约异常处理。

 

     代码下载:WcfExceptionLesson.rar

 

 

对于WCF也学习了一段时间,但是就是一直没有好好学一下,但是我对它的兴趣还是很大的,我觉得这个设计真是太好了,它可以统一 windows下的通信方式,而且仅仅通过改一下配置文件就可以改变通信方式,它是微软对SOA的一种架构设计,可以好好学一下。    dotnet3.0是在 dotnet2.0的基础上加了几个功能块,WCF、WF、WPF、Cardspace,对于WCF说起来也很好理它的概念,首先有服务器端程,再有就是服务器端程序宿主,最后是客户端程序。在WCF中,如果没有指定,服务端的WCF异常不会传递到客户端,如:在等于0时,客户端根本不知道异常的原因据,也即"divsionbyzero!"WCF异常信息不会传到客户端。

 

      [ServiceContract]          publicclassCalculatorService          ...{          [OperationContract]          intdivIDe(inta,intb)          ...{          if(b==0)thrownewException(“divisionbyzero!”);          returna/b;          }                

    在最简单的情况下,我们可以使用空FaultException(它只包含一个string字符串,称为错误原因),如下所示:

      if(b==0)thrownewFaultException(“divisionbyzero!”);                

    当然,我们可以定义强类型的WCF异常信息,并在方法上运用FaultContractAttribute来指定它,如下所示:

      [DataContract]          publicclassMathFault          [DataMember]          publicstringoperation;                   [DataMember]          publicstringdescription;          [FaultContract(typeof(MathFault))]          [OperationContract]          if(b==0)          MathFaultm=newMathFault();          m.operation=”/”;          m.description=”divisionbyzero!”;          thrownewFaultException<MathFault>(m);          }          returna/b;          }          }        

    注意:不能用XmlSerializer来序列化Fault相关的对象实例,即使在其上使用了XmlSerializerFormatAttribute属性。

总结

以上是内存溢出为你收集整理的Silverlight与WCF错误处理:Server Not Found全部内容,希望文章能够帮你解决Silverlight与WCF错误处理:Server Not Found所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存