成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF調用服務異常基本解決方案介紹

開發 開發工具
WCF調用服務異常的拋出主要有這樣的三種類型,包括通訊異常;狀態異常;以及服務異常。在這里我們將會對此一一介紹。

在應用WCF工具進行實際開發的時候,通常都會遇到一些異常的發生。那么如何才能正確有效的處理這些異常的產生呢?在這里我們先來一起了解一下WCF調用服務異常的相關解決方法,以幫助大家解決問題。#t#

WCF調用服務異常主要包括以下三種類型:

1. 通訊異常。諸如網絡錯誤,地址錯誤,服務器沒有啟動等等。這類異常多是 CommunicationException (或其具體繼承類型)。

2. 狀態異常。比如訪問了已經關閉的代理對象,契約錯誤,以及安全設置錯誤等。常見的有 ObjectDisposedException。

3. 服務異常。由服務器觸發,多是 FaultException。

針對WCF調用服務異常,不同的實例管理方式會有不同的策略。

1. Pre-Call: 服務實例被釋放,客戶端拋出 FaultException,客戶端代理對象無法繼續使用。

2. Pre-Session: 服務實例被釋放,會話終止。客戶端拋出 FaultException,客戶端代理對象無法繼續使用。

3. Singleton: 服務實例依舊運行,會話終止。客戶端拋出 FaultException,客戶端代理對象無法繼續使用。

基于平臺中立和技術整合的需要,WCF 以標準 Soap Faults 方式傳遞異常信息。WCF 提供了 FaultException 和 FaultException<T> 兩個類型來操控 Soap Faults。通過 FaultException<T> 我們可以向客戶端傳遞一個錯誤信息(FaultReason)以及一個附加的詳細信息(Detail)。理論上,這個附加信息是任何可以序列化的對象。

 

  1. throw new FaultException<int>(123, "abc");  
  2. throw new FaultException<Exception>(new Exception("abc")); 

 

如果想傳遞一個附帶元數據的自定義詳細信息,可以使用FaultContract。

 

  1. [DataContract]  
  2. public class ExceptionData  
  3. {  
  4. [DataMember]  
  5. public string Message;  
  6. }  
  7. [ServiceContract]  
  8. public interface IService  
  9. {  
  10. [OperationContract]  
  11. [FaultContract(typeof(ExceptionData))]  
  12. void Test();  
  13. }  
  14. public class Service : IService, IDisposable  
  15. {  
  16. public void Test()  
  17. {  
  18. ExceptionData d = new ExceptionData();  
  19. d.Message = "xxxxxx";  
  20. throw new FaultException<ExceptionData>(d, "abc");  
  21. }  
  22. public void Dispose()  
  23. {  
  24. Console.WriteLine("Dispose...");  
  25. }  

 

當然,我們也可以直接拋出一個被稱之為 "Unknown Faults" 的 FaultException 異常實例。還有另外一種情況,你已經寫好了代碼,有很多……很多……的代碼,要是一個個修改會非常……非常……麻煩,那么怎么在不做大的代碼修改情況下傳遞詳細異常信息給客戶端呢?

WCF調用服務異常方法1: ServiceBehavior(IncludeExceptionDetailInFaults=true)]

 

  1. [ServiceBehavior(IncludeExceptionDetailInFaults=true)]  
  2. public class Service : IService, IDisposable  
  3. {  
  4. public void Test()  
  5. {  
  6. throw new Exception("abc");  
  7. }  
  8.  
  9. public void Dispose()  
  10. {  
  11. Console.WriteLine("Dispose...");  
  12. }  

 

方法2: ServiceDebugBehavior

這個WCF調用服務異常的處理方法比方法1要更方便一些,我們除了可以寫代碼外,還可以用配置文件。

 

  1. ServiceHost host = new ServiceHost(typeof(Service), 
    new Uri("http://localhost:8080/Service"));  
  2. host.AddServiceEndpoint(typeof(IService), 
    new BasicHttpBinding(), "");  
  3. ServiceDebugBehavior debug = host.Description.Behaviors.
    Find
    <ServiceDebugBehavior>();  
  4. debug.IncludeExceptionDetailInFaults = true;  
  5. host.Open(); 

 

看看這兩種方法拋出的異常是什么樣的。

未處理 System.ServiceModel.FaultException`1

Message="abc"

Source="mscorlib"

StackTrace:

Server stack trace:

在 ConsoleApplication1.localhost.IService.Test()

在 ConsoleApplication1.localhost.ServiceClient.Test() 位置 D:\...\localhost.cs:行號 60

在 ConsoleApplication1.Program.Main(String[] args) 位置 D:\...\Program.cs:行號 62

不錯,除了 Error Message,還有詳細的 stack trace,方便調試。也正因為這樣,此種方法也不適合在正式項目中使用,作為系統架構設計的一部分,我們應該事先設計好異常處理。

如果服務方法是 IsOneWay=true,因不接收返回消息,客戶端也就不會觸發異常了。而 Callback 無非是服務器和客戶端掉換個身份而已,道理相同。

 

  1. public interface ICallback  
  2. {  
  3. [OperationContract]  
  4. void DoCallback();  
  5. }  
  6. [ServiceContract(CallbackContract=typeof(ICallback))]  
  7. public interface IService  
  8. {  
  9. [OperationContract]  
  10. void Test();  
  11. }  
  12. [ServiceBehavior(ConcurrencyModeConcurrencyMode=
    ConcurrencyMode.Reentrant)]  
  13. public class Service : IService, IDisposable  
  14. {  
  15. public void Test()  
  16. {  
  17. try  
  18. {  
  19. OperationContext.Current.GetCallbackChannel<ICallback>().
    DoCallback();  
  20. }  
  21. catch (FaultException e)  
  22. {  
  23. Console.WriteLine(e);  
  24. }  
  25. }  
  26. public void Dispose()  
  27. {  
  28. Console.WriteLine("Dispose...");  
  29. }  

以上就是我們為大家介紹的WCF調用服務異常的相關解決方法。

責任編輯:曹凱 來源: CSDN
相關推薦

2010-02-26 15:46:48

Silverlight

2010-02-24 14:05:08

WCF openati

2009-11-06 15:25:25

WCF異常

2010-02-23 14:56:18

WCF Bug

2010-02-22 10:29:11

WCF上傳文件

2010-02-24 09:28:37

WCF安全配置

2009-12-07 15:50:27

WCF文件

2017-06-01 11:17:57

Python異常重試解決方案

2018-09-14 16:20:37

2009-12-22 15:14:33

WCF調用

2016-03-13 18:06:47

2009-12-29 16:07:19

ADO類型

2009-10-15 10:29:03

布線系統解決方案

2009-12-21 10:27:52

WCF基本概念

2010-03-02 16:09:53

WCF框架

2009-11-05 12:45:25

WCF異常

2009-12-08 15:19:58

WCF大數據量

2020-09-04 13:50:35

前端異常監控代碼

2009-12-07 18:38:16

WCF異常

2009-03-05 09:12:29

IDC網絡管理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久二区 | 亚洲电影第三页 | 亚洲人在线 | av免费网| 91在线看 | 国产精品乱码一二三区的特点 | 福利精品| 欧区一欧区二欧区三免费 | av国产精品毛片一区二区小说 | 九九精品在线 | 欧美精品在线免费 | 免费观看成人鲁鲁鲁鲁鲁视频 | 在线成人免费视频 | 日韩免费福利视频 | 欧美精品在欧美一区二区少妇 | 午夜影院在线观看 | 精品二区 | 2018国产大陆天天弄 | 日韩一区二区在线播放 | av高清毛片 | 亚洲三级在线观看 | 男女羞羞视频大全 | 国产精品一码二码三码在线 | 97在线超碰 | 91综合在线视频 | 欧美色图另类 | 亚洲成人精品国产 | 一区二区三区视频在线观看 | 在线观看免费高清av | 久久久久久亚洲精品 | 国产视频h | 精品在线一区 | 一区二区国产精品 | 自拍偷拍3p| 日本不卡免费新一二三区 | 在线看日韩av | ww 255hh 在线观看 | 久久精品久久精品 | 中文字幕av第一页 | 羞羞羞视频 | 99久久婷婷国产综合精品电影 |