none
WCF客户端接受异常的疑问 RRS feed

  • 问题

  • 客户端访问wcf服务时服务器上的方法抛出了异常,请问怎么才能接受到服务器抛出的异常信息,而不是CommunicationObjectFaultedException异常.
    比如:服务器上抛出new Exception("xxx错误"),客户端接受不到"xxx错误"这样的信息.怎么设置客户端才能接受到呢?

    错误信息开始=====>
    错误类型:CommunicationObjectFaultedException
    错误信息:通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。
    错误堆栈:

    Server stack trace:
       在 System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)

    Exception rethrown at [0]:
       在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       在 System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
       在 System.ServiceModel.ClientBase`1.System.ServiceModel.ICommunicationObject.Close(TimeSpan timeout)
       在 System.ServiceModel.ClientBase`1.Close()
       在 System.ServiceModel.ClientBase`1.System.IDisposable.Dispose()

    2009年9月11日 8:23

答案

全部回复

  • Hi,
       你要想在客户端获得服务端的异常信息,需要自己定义错误契约,fault contract.
    然后把错误信息返回到客户端,关于错误契约的定义可以google,网上也有资料~
    我以后打算写个错误处理的文章吧~

    呵呵~
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年9月11日 10:22
    版主
  • 原来这样啊,谢谢

    2009年9月11日 10:24
  • WCF中主要的契约有四种:Service Contract、Data Contract、Fault Contract、Message Contract。最后一种契约不常用。
    建议楼主先把这几种契约了解一下。
    一个没有异常处理的程序是不完整的程序。
    一个没有完整的异常处理的程序也是不完整的程序。
    期待Xu Lei的文章!


    做最好的自己
    2009年9月11日 15:07