WCF异常相关经验分享

WCF框架作为一款由微软开发的帮助解决跨平台操作的方案,深受开发人员喜爱。在这里主要介绍一下WCF异常的相关知识。希望对大家有用。#t#

WCF异常将服务异常(Exception)转换成 SOAP faults,传递到客户端后再次转换成 Exception。只不过缺省情况下,我们很难从中获取有意义的信息。

  1. < ServiceContract()> _
  2. Public Interface IService1
  3. < OperationContract()> _
  4. Function GetData(ByVal
     value As Integer) As String
  5. End Interface
  6. Public Class Service1
  7. Implements IService1
  8. Public Function GetData(ByVal 
    value As Integer) As String 
    Implements IService1.GetData
  9. Throw New Exception("发生错误。")
  10. Return String.Format
    ("You entered: {0}", value)
  11. End Function
  12. End Class

抛出来的WCF异常信息:

接收对 http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/ 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参阅服务器日志。

Server stack trace:

在 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)

在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

不太好理解

当然,WCF 会提供一个包装异常类 FaultException 来帮助我们处理这些问题。

发生错误。

Server stack trace:

在 System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)

在 System.Servi

这样就对WCF异常好理解多了,所以在服务端抛出异常时,使用FaultException 异常类。

另外,我们还可以通过 FaultContractAttribute 传递更详细的异常信息给客户端。

 
 
 
  1. < ServiceContract()> _
  2. Public Interface IService1
  3. < OperationContract(), 
    FaultContract(GetType(Fault))> _
  4. Function GetData(ByVal 
    value As Integer) As String
  5. End Interface
  6. Public Class Service1
  7. Implements IService1
  8. Public Function GetData(
    ByVal value As Integer) As 
    String Implements IService1.GetData
  9. Dim f As New Fault
  10. f.ErrorCode = 200
  11. f.Message = "发生错误"
  12. Throw New FaultException
    (Of Fault)(f, f.Message)
  13. Return String.Format("You
     entered: {0}", value)
  14. End Function
  15. End Class
  16. < DataContract()> _
  17. Public Class Fault
  18. < DataMember()> _
  19. Public ErrorCode As Integer
  20. < DataMember()> _
  21. Public Message As String
    String = String.Empty
  22. End Class

客户端代码:

 
 
 
  1. Sub Main()
  2. Dim url As String = "http:/
    /localhost:8731/Design_Time_
    Addresses/WcfServiceLibrary1
    /Service1/mex"
  3. Dim host As New System.Servi
    ceModel.ServiceHost(GetType
    (WcfServiceLibrary1.Service1))
  4. host.AddServiceEndpoint(GetType
    (WcfServiceLibrary1.IService1), 
    New System.ServiceModel.Basic
    HttpBinding(), url)
  5. host.Open()
  6. Console.WriteLine(host.State.ToString)
  7. Dim c = New System.ServiceModel
    .ChannelFactory(Of WcfServiceL
    ibrary1.IService1)(New System.
    ServiceModel.BasicHttpBinding, url)
  8. Dim s As WcfServiceLibrary1.
    IService1 = c.CreateChannel
  9. Try
  10. Console.WriteLine(s.GetData(1))
  11. Catch ex As System.ServiceModel.
    FaultException(Of WcfService
    Library1.Fault)
  12. Console.WriteLine("错误代码:" 
    & ex.Detail.ErrorCode)
  13. Console.WriteLine("错误消息:" 
    & ex.Detail.Message)
  14. End Try
  15. Console.ReadKey()
  16. End Sub

这样WCF异常信息,就可以传递到客户端了。

新闻名称:WCF异常相关经验分享
当前URL:http://www.shufengxianlan.com/qtweb/news14/427764.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联