日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
WCFdataContractSerializer設(shè)置技巧講解

大家可能知道,WCF這樣一款功能強(qiáng)大的開(kāi)發(fā)插件,其中有很多內(nèi)容值得我們?nèi)ド钊氲奶接懷芯?。在這篇文章中,我們將會(huì)針對(duì)其中一個(gè)比較重要的屬性,WCF dataContractSerializer的相關(guān)設(shè)置進(jìn)行一個(gè)詳細(xì)的介紹。#t#

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、兩當(dāng)網(wǎng)站維護(hù)、網(wǎng)站推廣。

在WCF的使用過(guò)程中,有時(shí)會(huì)碰到傳遞的數(shù)據(jù)量比較巨大,客戶(hù)端程序報(bào)錯(cuò)。常見(jiàn)的解決方法就是通過(guò)增大改變服務(wù)端與客戶(hù)端配置文件serviceBehaviors的dataContractSerializer 的maxItemsInObjectGraph屬性。有沒(méi)有不通過(guò)配置文件,直接硬編碼增大maxItemsInObjectGraph的值呢(此文不是考慮那種做法的優(yōu)劣,而僅僅是探討一種可能)?答案是肯定的。方法如下。

既然wcf的maxItemsInObjectGraph可以通過(guò)配置去設(shè)定,那么應(yīng)該也有可能通過(guò)代碼去設(shè)定。因?yàn)閙axItemsInObjectGraph 通過(guò)配置文件信息的讀取到這個(gè)信息后,最終應(yīng)該把讀到的信息去設(shè)置某個(gè)類(lèi)的屬性,從而改變服務(wù)的配置。

1. 先從有配置文件時(shí),服務(wù)的運(yùn)行開(kāi)始著手。服務(wù)端配置文件如下

 
 
 
  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實(shí)例化完成后加入如下的代碼:

 
 
 
  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

進(jìn)一步跟蹤得知。WCF dataContractSerializer對(duì)應(yīng)的類(lèi)就是DataContractSerializerServiceBehavior。

2. 構(gòu)造DataContractSerializerServiceBehavior實(shí)例,設(shè)置maxItemsInGraph屬性,并把實(shí)例插入host.Description.Behaviors中。

用reflector 查看DataContractSerializerServiceBehavior,發(fā)現(xiàn)聲明如下

internal class DataContractSerializerServiceBehavior£oIServiceBehavior, IEndpointBehavior{}看來(lái)只能用反射類(lèi)實(shí)例化它了。具體代碼如下:

 
 
 
  1. ServiceHost host = new ServiceHost(typeof(Service1));  
  2. Type t = host.GetType();  
  3. object obj= t.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. 經(jīng)測(cè)試,硬編碼設(shè)置maxItemsInObjectGraph,與WCF dataContractSerializer設(shè)置配置文件的屬性能達(dá)到同樣的效果


當(dāng)前名稱(chēng):WCFdataContractSerializer設(shè)置技巧講解
分享網(wǎng)址:http://www.5511xx.com/article/coijjsd.html