2011-01-27 4 views
9

मुझे लगता है किकॉन्फ़िगरेशन फ़ाइल का उपयोग किए बिना maxItemsInObjectGraph प्रोग्रामेटिक रूप से कैसे जोड़ें?

EndpointAddress address = new EndpointAddress("http://example.com/services/OrderService.svc"); 

की तरह एक EndpointAddress बनाने लेकिन मैं नहीं प्रोग्राम के रूप में इस Endpoint को व्यवहार जोड़ सकते हैं।

व्यवहार नीचे .:

<behaviors> 
    <endpointBehaviors> 
    <behavior name="NewBehavior"> 
     <dataContractSerializer maxItemsInObjectGraph="6553600" /> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

उत्तर

28

दिया जाता है सर्वर आप ServiceBehavior गुण में यह जोड़ने के लिए पर:

[ServiceBehavior(MaxItemsInObjectGraph = int.MaxValue)] 

ग्राहक पर आप अंत बिंदु करने के लिए इसे लागू करने के लिए की है। ,

var factory = new ChannelFactory<IInterface>(...); 
foreach (OperationDescription op in factory.Endpoint.Contract.Operations) 
    { 
     var dataContractBehavior = op.Behaviors.Find<DataContractSerializerOperationBehavior>(); 
     if (dataContractBehavior != null) 
     { 
      dataContractBehavior.MaxItemsInObjectGraph = int.MaxValue; 
     } 
    } 
+1

यह दोषरहित काम किया, धन्यवाद –

+0

अच्छा - यह कल का इस्तेमाल किया । धन्यवाद – Liam

+0

लेकिन ध्यान दें कि यदि आप अपने डेटाऑन्ट्रोलसेरियलइज़र ऑपरेशनबिफर को कार्यान्वित कर रहे हैं, उदाहरण के लिए, चक्र संदर्भों को संरक्षित करने के लिए, आपको DataContractSerializer के निर्माता में MaxItemsInObjectGraph निर्दिष्ट करना होगा। –

2

सर्वर साइड पर आप भी कर सकते हैं: इस उदाहरण में आप अपने ChannelFactory में सभी अंतिम बिंदुओं को जोड़ने के लिए कैसे देख सकते हैं

ServiceHost host = new ServiceHost(); 
ServiceBehaviorAttribute sba = host .Description.Behaviors.Find<ServiceBehaviorAttribute>(); 
      if (sba == null) 
      { 
       sba = new ServiceBehaviorAttribute(); 
       sba.MaxItemsInObjectGraph = int.MaxValue; 
       host.Description.Behaviors.Add(sba); 
} 
संबंधित मुद्दे