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

WCF dataContractSerializer設置技巧講解

開發 開發工具
我們在這篇文章中為大家介紹的WCF dataContractSerializer的屬性設置方法,主要就是利用反射來進行相應的改變。

大家可能知道,WCF這樣一款功能強大的開發插件,其中有很多內容值得我們去深入的探討研究。在這篇文章中,我們將會針對其中一個比較重要的屬性,WCF dataContractSerializer的相關設置進行一個詳細的介紹。#t#

在WCF的使用過程中,有時會碰到傳遞的數據量比較巨大,客戶端程序報錯。常見的解決方法就是通過增大改變服務端與客戶端配置文件serviceBehaviors的dataContractSerializer 的maxItemsInObjectGraph屬性。有沒有不通過配置文件,直接硬編碼增大maxItemsInObjectGraph的值呢(此文不是考慮那種做法的優劣,而僅僅是探討一種可能)?答案是肯定的。方法如下。

 

既然wcf的maxItemsInObjectGraph可以通過配置去設定,那么應該也有可能通過代碼去設定。因為maxItemsInObjectGraph 通過配置文件信息的讀取到這個信息后,最終應該把讀到的信息去設置某個類的屬性,從而改變服務的配置。

1. 先從有配置文件時,服務的運行開始著手。服務端配置文件如下

 

 

  1. < behaviors> 
  2. < serviceBehaviors> 
  3. < behavior name="Service1Behavior"> 
  4. < serviceMetadata httpGetEnabled="true" /> 
  5. < serviceDebug includeExceptionDetailInFaults="true" /> 
  6. < dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
  7. < /behavior> 
  8. < /serviceBehaviors> 
  9. < /behaviors> 
  10. < /system.serviceModel> 

 

 

在ServiceHost實例化完成后加入如下的代碼:

 

  1. public void Start()  
  2. {  
  3. ServiceHost host = new ServiceHost(typeof(Service1));  
  4. Console.WriteLine("---------------------------------");  
  5. foreach (var item in host.Description.Behaviors)  
  6. {  
  7. Console.WriteLine(item.ToString());  
  8. }  
  9. Console.WriteLine("---------------------------------");  
  10. host.Open();  

 

 

 

 

在輸出窗口得到以下信息:

---------------------------------

System.ServiceModel.ServiceBehaviorAttribute

Microsoft.VisualStudio.Diagnostics.ServiceModelSink.Behavior

System.ServiceModel.Description.ServiceMetadataBehavior

System.ServiceModel.Description.ServiceDebugBehavior

System.ServiceModel.Dispatcher.DataContractSerializerServiceBehavior

System.ServiceModel.Description.ServiceAuthorizationBehavior

 

進一步跟蹤得知。WCF dataContractSerializer對應的類就是DataContractSerializerServiceBehavior。

2. 構造DataContractSerializerServiceBehavior實例,設置maxItemsInGraph屬性,并把實例插入host.Description.Behaviors中。

 

用reflector 查看DataContractSerializerServiceBehavior,發現聲明如下

internal class DataContractSerializerServiceBehavior£ºIServiceBehavior, IEndpointBehavior{}看來只能用反射類實例化它了。具體代碼如下:

  1. ServiceHost host = new ServiceHost(typeof(Service1));  
  2. Type t = host.GetType();  
  3. object objt.Assembly.CreateInstance("System.ServiceModel.
    Dispatcher.DataContractSerializerServiceBehavior",
    true,
    BindingFlags.CreateInstance|BindingFlags.Instance|
    BindingFlags.NonPublic ,null,new object[]{false ,Int32.MaxValue },
    null,null);  
  4. IServiceBehavior myServiceBehavior=obj as IServiceBehavior ;  
  5. if (myServiceBehavior != null)  
  6. {  
  7. host.Description.Behaviors.Add(myServiceBehavior);  
  8. }  
  9. Console.WriteLine("---------------------------------");  
  10. foreach (var item in host.Description.Behaviors)  
  11. {  
  12. Console.WriteLine(item.ToString());  
  13. }  
  14. Console.WriteLine("---------------------------------");  
  15. host.Open();3. 然后注釋掉配置文件的dataContractSerializer  
  16. < behaviors> 
  17. < serviceBehaviors> 
  18. < behavior name="Service1Behavior"> 
  19. < serviceMetadata httpGetEnabled="true" /> 
  20. < serviceDebug includeExceptionDetailInFaults="true" /> 
  21. < !--< dataContractSerializer maxItemsInObjectGraph="2147483647" />--> 
  22. < /behavior> 
  23. < /serviceBehaviors> 
  24. < /behaviors> 

 

4. 經測試,硬編碼設置maxItemsInObjectGraph,與WCF dataContractSerializer設置配置文件的屬性能達到同樣的效果

責任編輯:曹凱 來源: 博客園
相關推薦

2009-12-21 18:46:50

WCF傳輸大數據

2010-02-22 16:19:25

WCF自托管

2009-12-22 19:14:36

WCF效率

2009-12-21 14:49:27

2010-02-23 14:17:20

WCF配置文件

2010-02-26 13:40:28

WCF消息頭

2010-02-24 13:48:44

MSMQ使用WCF

2010-03-02 10:54:42

WCF回調操作

2010-02-23 10:57:34

WCF Streami

2009-12-22 14:54:52

WCF安全

2009-11-09 09:34:07

WCF集合

2009-11-09 09:23:10

WCF數據契約

2009-12-22 15:33:50

WCF傳輸安全

2010-02-24 15:20:23

WCF Message

2009-12-08 13:46:16

Silverlight

2010-02-22 11:25:50

WCF DateSet

2010-02-24 12:49:39

WCF枚舉

2009-12-07 17:13:23

WCF技術

2010-05-20 16:49:18

2010-02-24 09:38:58

WCF應用編碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 我爱操| 超碰综合 | 日韩欧美中文字幕在线观看 | 成人在线视频免费观看 | 精品国产欧美一区二区 | 欧美乱码精品一区二区三区 | 91欧美激情一区二区三区成人 | 精品国产一区二区三区久久久蜜月 | 欧美极品少妇xxxxⅹ免费视频 | 亚洲一二三在线观看 | 中文一区 | 精产国产伦理一二三区 | 国产精品777一区二区 | 最新国产在线 | 播放一级黄色片 | 午夜天堂精品久久久久 | 美女视频一区二区 | 最近中文字幕在线视频1 | 超碰人人人人 | 91久久久久 | 99re在线 | 国产综合精品一区二区三区 | 请别相信他免费喜剧电影在线观看 | 成人欧美一区二区三区在线观看 | 亚洲成人三级 | 亚洲成人在线免费 | 欧美一级淫片免费视频黄 | 波多野结衣中文视频 | 亚洲综合国产 | 国产精品毛片av一区 | 黄免费看 | 91xxx在线观看 | 精品国产三级 | 精品久久久久久国产 | 国产91色在线 | 亚洲 | 精品国产乱码久久久久久88av | 国产一区 在线视频 | 激情一区二区三区 | 久久精品天堂 | 久久久久综合 | 免费在线观看一区二区 |