.net डब्ल्यूसीएफ त्रुटि "ऑब्जेक्ट ग्राफ़ में सीरियल या डिसेराइज किए जा सकने वाली वस्तुओं की अधिकतम संख्या '65536' है"




wcf datacontractserializer (4)

मुझे WCF कॉल पर निम्न त्रुटि प्राप्त हो रही है:

किसी ऑब्जेक्ट ग्राफ़ में सीरिजलाइज्ड या डिस्अरीलाइज किए जा सकने वाले आइटम्स की अधिकतम संख्या '65536' है

मैंने एक टन मंच पोस्ट पढ़ा है और उनमें से कई ने बड़े ऑब्जेक्ट ग्राफ़ को अनुमति देने के लिए नए व्यवहार को निर्दिष्ट करने के लिए app.config और web.config को संशोधित करने का उल्लेख किया है। मैंने ये किया है और उन फ़ाइलों में मेरे पास यही है:

WPF प्रोजेक्ट पर App.Config:

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>

  </endpointBehaviors>

</behaviors>

<services>
  <service name="digiPM.Shell.LogOutPMSEMRService.PMSEMRLogOutService">
    <!--<endpoint address="" binding="basicHttpBinding" contract="digiPM.Shell.LogOutPMSEMRService.IPMSEMRLogOutService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/Design_Time_Addresses/digiPM.Shell.LogOutPMSEMRService/PMSEMRLogOutService/" />
      </baseAddresses>
    </host>-->
    <endpoint address="" binding="netTcpBinding" name="NetTcpBindingEndpoint" contract="digiPM.Shell.LogOutPMSEMRService.IPMSEMRLogOutService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" name="MexTcpBidingEndpoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8732/Design_Time_Addresses/digiPM.Shell.LogOutPMSEMRService/PMSEMRLogOutService/" />
      </baseAddresses>
    </host>
  </service>
</services>

<!--binding info - removed this for the sake of readability for this post -->

सेवा प्रोजेक्ट पर web.config:

<system.serviceModel>

<bindings>
  <wsHttpBinding>
      <binding name="WSHttpBinding_Services" closeTimeout="01:10:00" openTimeout="01:10:00" receiveTimeout="01:10:00" sendTimeout="01:10:00" bypassProxyOnLocal="false" 
               transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" 
               messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="4096" maxStringContentLength="2147483647" maxArrayLength="524288" maxBytesPerRead="524288" maxNameTableCharCount="524288" />
          <reliableSession ordered="true" inactivityTimeout="01:10:00" enabled="false" />

          <security mode="None">

          </security>
      </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="digiPM.Service.Behavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>

  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="customObjectQuota">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </endpointBehaviors>
</behaviors>

<services>
  <service behaviorConfiguration="digiPM.Service.Behavior"
    name="digiPM.Service.AddressCrudService">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_Services"
                name="AddressCrudServiceEndPoint" bindingNamespace="urn:Dawliasoft.Sculpture"  contract="digiPM.Services.Contracts.IAddressCrudService" behaviorConfiguration="customObjectQuota" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"  behaviorConfiguration="customObjectQuota" />
  </service>

 <!--<more services defined with same configuration as above..>-->

  </services>


</system.serviceModel>

यह, हालांकि, मदद नहीं की है ध्यान दें कि एपीसी में संदर्भित सेवाएं। CONFIG मुझे सेवाओं के साथ समस्याएं नहीं हैं I

मैंने भी निम्नलिखित की कोशिश की है:

  • सेवा के कार्यान्वयन में इन विशेषताओं को जोड़ा गया: [डेटाकॉन्ट्रक्ट (आईआरिफेरियंस = सच)], [सर्विसविचेटर (एड्रेसफिल्टरमोड = एड्रेसफ़िल्टरमोड.एनी, मैक्सआईटीम्स इनऑब्जेक्ट ग्राफ़ = 2147483646)]

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

विचार? विचार? मैं यहाँ से कहाँ जाऊँ?

अग्रिम में धन्यवाद!


मुझे एहसास हुआ कि आपकी WPF कॉन्फ़िग फाइल सही नहीं है इसलिए, मैंने अपनी सभी टिप्पणियों को हटा दिया क्योंकि वे मान्य WCF कॉन्फ़िगरेशन मान रहे थे। आपकी WPF कॉन्फ़िग फाइल सही नहीं है ... इसे सेवा के बजाय "क्लाइंट" कहने की ज़रूरत है ... क्या आप Visual Studio में "सेवा संदर्भ जोड़ें" का उपयोग कर रहे हैं? यदि हां, तो यह आपके लिए सही कॉन्फ़िग फ़ाइल बनाना चाहिए था

अन्यथा, कृपया अपने WPF प्रोजेक्ट में अपने क्लाइंट कॉन्फ़िग फ़ाइल के लिए सही प्रारूप के लिए MSDN देखें।


नीचे दिए गए मूल्यों को कॉन्फ़िगर करना मेरे लिए समस्या हल कर रहा है

ग्राहक कॉन्फ़िग:

<system.serviceModel>
<bindings>
<basicHttpBinding>
  <binding name="BasicHttpBinding_IManagementService" closeTimeout="00:01:00"
    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
    maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
    useDefaultWebProxy="true">
    <readerQuotas maxDepth="128" maxStringContentLength="2147483647"
      maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    <security mode="None">
      <transport clientCredentialType="None" proxyCredentialType="None"
        realm="" />
      <message clientCredentialType="UserName" algorithmSuite="Default" />
    </security>
  </binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://XXXX/ManagementService.svc"
  binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IManagementService"
  contract="ManagementServiceReference.IManagementService"
  name="BasicHttpBinding_IManagementService" behaviorConfiguration="ManagementServiceBehaviour"/>
</client>
<behaviors>
<endpointBehaviors>
  <behavior name="ManagementServiceBehaviour">
    <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
  </behavior>
</endpointBehaviors>
</behaviors>

सर्वर कॉन्फ़िग:

<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<behaviors>
<serviceBehaviors>
  <behavior name="ManagementServiceBehaviour">
    <serviceDebug includeExceptionDetailInFaults="true" />
    <serviceMetadata httpGetEnabled="true" />
    <dataContractSerializer ignoreExtensionDataObject="false" maxItemsInObjectGraph="2147483646" />
  </behavior>
  <behavior name="">
    <serviceMetadata httpGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="false" />
  </behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
  <binding name="BasicHttpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" closeTimeout="01:50:00" openTimeout="01:50:00" sendTimeout="01:50:00" receiveTimeout="01:50:00" >
    <readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
  </binding>
</basicHttpBinding>
</bindings>

<services>
<service behaviorConfiguration="ManagementServiceBehaviour" name="BusinessLogic.Facade.EntityFacade.Services.ManagementService">
  <endpoint binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding" contract="BusinessLogic.Facade.EntityFacade.Contracts.IManagementService">
    <identity>
      <dns value="" />
    </identity>
  </endpoint>
</service>
</services>
</system.serviceModel>

क्या आपने बफर और अधिकतम प्राप्त संदेश का आकार भी बढ़ाया है?

maxBufferSize="6553600" maxBufferPoolSize="52428800" maxReceivedMessageSize="6553600"

"डेटा कॉन्ट्रैक्टसिरीलाइज़र" तत्व से सावधान रहें मेरे मामले में मुझे तब तक त्रुटि मिलती है जब तक मैं इस तत्व को मूल तत्व "व्यवहार" के पहले आइटम के रूप में नहीं रखता। कम से कम ग्राहक पक्ष पर वास्तव में