2013-07-12 3 views
10

काम नहीं कर रहा है मुझे अपनी डब्ल्यूसीएफ सेवा तक पहुंचने का प्रयास करने में निम्न त्रुटि मिल रही है।WCF MaxItemsInObjectGraph सेटिंग

'ऑब्जेक्ट ग्राफ़ में धारावाहिक या deserialized किया जा सकता है कि आइटम की अधिकतम संख्या' 65536 'है। ऑब्जेक्ट ग्राफ़ बदलें या MaxItemsInObjectGraph कोटा

कुछ शोध करना, ऐसा लगता है कि मुझे यह करने की आवश्यकता है कि यह सेटिंग उच्च मान हो। यही वह है जो मैं करने की कोशिश कर रहा हूं, लेकिन सेटिंग कॉन्फ़िगरेशन से पढ़ी नहीं जा रही है। मैं 65536 मूल्य के साथ एक ही अपवाद प्राप्त करता रहता हूं।

मैंने इस Link पर दिए गए निर्देशों का पालन किया, लेकिन मुझे कोई भाग्य नहीं है।

यहां मैंने डब्ल्यूसीएफ सेवा के वेब पर कॉन्फ़िगर किया है। कॉनफिग।

<behaviors> 
     <serviceBehaviors> 
      <behavior name="metadataBehavior"> 
       <serviceMetadata httpGetEnabled="true" httpGetUrl="" /> 
       <serviceDebug includeExceptionDetailInFaults="false" /> 
       <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 

यह वही ग्राहक की app.config में है:

 <behaviors> 
     <serviceBehaviors> 
      <behavior> 
       <serviceMetadata httpGetEnabled="True" /> 
       <serviceDebug includeExceptionDetailInFaults="False" /> 
      </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
      <behavior > 
       <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 

और अंत में, मैं WCF सेवा पर ही निम्न विशेषता:

[ServiceBehavior(MaxItemsInObjectGraph = 2147483646, IncludeExceptionDetailInFaults = true)] 

ऊपर विन्यास के बावजूद , मुझे अभी भी 65536 मूल्य के बारे में शिकायत एक अपवाद मिलता है। इन सेटिंग्स में से किसी भी एप्लिकेशन का उपयोग क्यों नहीं किया जा रहा है? क्या कुछ और है जिसे कहीं और सेट करने की जरूरत है?

उत्तर

5

परमाणु जाना और मशीन.config को अद्यतन करना पड़ा;

Directions Here

यह का सार "system.serviceModel" खंड के लिए निम्न जोड़ना है।

<commonBehaviors> 
     <endpointBehaviors> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </serviceBehaviors> 
    </commonBehaviors> 
8

आप सही रास्ते पर थे! आपको बस इतना करना था व्यवहार करने के लिए कोई नाम जोड़ने के

<behavior name="MyBehavior"> 
    <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
</behavior> 

और फिर अंत बिंदु पर जोड़ने

<endpoint .... behaviorConfiguration="MyBehavior"/> 
+0

धन्यवाद! मुझे बहुत समय बचाया :) –

0

मैं इसके लिए मशीन कॉन्फ़िगरेशन संशोधित करने के लिए एक कार्यक्रम में लिखा था, क्योंकि समर्थन था। यह मेरे लिए काम करता है, लेकिन मैंने परीक्षण नहीं किया है।

using System; 
using System.IO; 
using System.Linq; 
using System.Xml.Linq; 

namespace FixMachineConfigBehavior 
{ 
    class Program 
    { 
     public static XElement IfNotExistsAdd(XDocument xd, XElement rootElement, string childName, XElement newChild) 
     { 
      if (rootElement.Elements(childName).Count() == 0) 
      { 
       Console.WriteLine(" adding " + childName + " node..."); 
       rootElement.Add(newChild); 
      } 

      return rootElement.Element(childName); 
     } 

     static void Main(string[] args) 
     { 
      foreach (var file in Directory.EnumerateFiles(Environment.GetEnvironmentVariable("windir") + @"\Microsoft.NET\","machine.config",SearchOption.AllDirectories)) 
      { 
       Console.WriteLine("fixing: " + file); 

       TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1); 
       double ms = t.TotalMilliseconds; 

       File.Copy(file, file + "." + ms + ".bak", true); 

       var xd = XDocument.Load(file); 

       XElement i = xd.Root; 
       i = IfNotExistsAdd(xd, i, "system.serviceModel", new XElement("system.serviceModel")); 
       i = IfNotExistsAdd(xd, i, "commonBehaviors", new XElement("commonBehaviors")); 
       i = IfNotExistsAdd(xd, i, "endpointBehaviors", new XElement("endpointBehaviors")); 
       i = IfNotExistsAdd(xd, i, "dataContractSerializer", new XElement("dataContractSerializer", new XAttribute("maxItemsInObjectGraph", Int32.MaxValue))); 

       xd.Save(file); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 
0

मैं एक ही समस्या थी और कई विकल्प की कोशिश की लेकिन मैं यहाँ समाधान नहीं मिला: https://msdn.microsoft.com/en-us/library/ms732038.aspx

में "क्रमबद्धता प्रक्रिया को नियंत्रित करना"।

जोड़ रहा है ...

[ServiceBehavior (MaxItemsInObjectGraph = 100000)] वर्ग मेरी सेवा ...

सौभाग्य

0

मैं एक ही मुद्दा था, लौटने कक्षा में कुछ enums था ।क्या पता चला कि वे शून्य नहीं हो सकते हैं। जांचें कि क्या आपके पास कोई भी एम्स है जिसे वापस किया जाना है।