none
ProtocolException - maxStringContentLength 8192 - Não altera nem via código nem via app.config RRS feed

  • Pergunta

  • Olá Pessoal,

    Estou com um problema que parece ter uma solução muito obscura, tenho duas camadas/aplicações de serviço WCF, uma possui regras de negócio(SVC2), a outra possui o acesso a dados(SVC3).

    Essas camadas se comunicam normalmente, independente da quantidade de dados quando estou testando pelo visual studio, mas quando instalo os serviços em uma máquina, hospedando na forma de WINDOWS SERVICES, simplesmente não consigo passar grande quantidade de dados.

    Sim, ja pesquisei no google, msdn, e afins.

    O serviço esta usando a binding correta. O tamanho das mensagens esta 2147483647, para as propriedades de tamanho e readerQuotas

    A mensagem da exceção é:


    Como vocês podem notar também tentei alterar os valores via código antes de invocar o método do serviço, mas também sem sucesso.

    Tentei alterar os valores do lado do serviço (via binding e via código), mas para a propriedade maxStringContentLenght o valor sempre fica padrão (8192).

    Estou a 3 dias tentando resolver esse problema, e não sei mais o que devo fazer ou onde devo.

    Dados adicionais:

    criei um método que me retorna o valor dessas propriedades na camada de acesso a dados(SVC3)

    os valores estão assim
    -Quotas: /MaxArrayLenght:2147483647/MaxBytesPerRead:2147483647/MaxDepth:2147483647/MaxNameTableCharCount:2147483647/MaxStringContentLength:8192/

    habilitei o tracing e confirmei que o erro acontece na camada de acesso a dados(SVC3), mas o valor sempre fica padrão independente de eu tentar alterar-lo via código ou via arquivo .config

    Vou postar os app.config em um reply, para não tornar esse post muito grande,  desde já agradeço.




    Isaias S. Silva

    sexta-feira, 17 de janeiro de 2014 14:53

Todas as Respostas

  • .config do SVC3

    <?xml version="1.0"?>
    <configuration>
    
      <system.diagnostics>
        <sources>
          <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
            propagateActivity="true">
            <listeners>
              <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                <filter type="" />
              </add>
              <add name="ServiceModelTraceListener">
                <filter type="" />
              </add>
            </listeners>
          </source>
        </sources>
        <sharedListeners>
          <add initializeData="C:\Windows\System32\SVC3\SVC3_trace.svclog"
            type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
            name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
            <filter type="" />
          </add>
        </sharedListeners>
      </system.diagnostics>
    
      <system.web>
        <compilation debug="true"/>
      </system.web>
      <!-- When deploying the service library project, the content of the config file must be added to the host's 
      app.config file. System.Configuration does not support config files for libraries. -->
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
    
            <binding closeTimeout="00:02:00"
                    openTimeout="00:02:00" receiveTimeout="00:10:00" sendTimeout="00:02:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Streamed"
                    useDefaultWebProxy="true">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
                maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                  realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
    
            <binding name="BasicHttpBinding_ISVC3" closeTimeout="00:03:00"
              openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00"
              allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
              maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
              textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true"
              messageEncoding="Text">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                  realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
    
        <services>
          <service behaviorConfiguration="SVC3Behavior" name="SVC3.SVC3">
            <endpoint address="http://localhost:5510/SVC3" behaviorConfiguration="SVC3EndpointBehavior"
              binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISVC3" name="BasicHttpBinding_ISVC3"
              contract="SVC3.ISVC3" />
            <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
              contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:5510/SVC3" />
              </baseAddresses>
            </host>
          </service>
    
        </services>
        <behaviors>
          <endpointBehaviors>
            <behavior name="SVC3EndpointBehavior">
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
          </endpointBehaviors>
          <serviceBehaviors>
            <behavior name="">
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
            <behavior name="SVC3Behavior">
              <serviceMetadata />
              <serviceDebug />
              <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>



    Isaias S. Silva

    sexta-feira, 17 de janeiro de 2014 16:07
  • .config do SVC2

    <?xml version="1.0"?>
    <configuration>
    
      <system.diagnostics>
        <sources>
          <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
            propagateActivity="true">
            <listeners>
              <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                <filter type="" />
              </add>
              <add name="ServiceModelTraceListener">
                <filter type="" />
              </add>
            </listeners>
          </source>
        </sources>
        <sharedListeners>
          <add initializeData="C:\Windows\System32\SVC2\SVC2_tracelog.svclog"
            type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
            name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
            <filter type="" />
          </add>
        </sharedListeners>
      </system.diagnostics>
      <system.web>
        <compilation debug="true"/>
      </system.web>
      <!-- When deploying the service library project, the content of the config file must be added to the host's 
      app.config file. System.Configuration does not support config files for libraries. -->
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_ISVC3" closeTimeout="00:03:00"
                    openTimeout="00:03:00" sendTimeout="00:03:00" maxBufferPoolSize="2147483647"
                    maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
            </binding>
            <binding name="SVC2DefaultBinding" closeTimeout="00:03:00" openTimeout="00:03:00"
              receiveTimeout="00:10:00" sendTimeout="00:03:00" allowCookies="false"
              bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
              maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
              textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
              <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
            </binding>
          </basicHttpBinding>
        </bindings>
    
        <client>
          <endpoint address="http://localhost:5510/SVC3" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISVC3"
              contract="SVC3.ISVC3" name="BasicHttpBinding_ISVC3" />
    
        </client>
    
        <services>
          <service name="SVC2.SVC2">
            <clear />
            <endpoint binding="basicHttpBinding" bindingConfiguration="SVC2DefaultBinding"
              name="SVC2DefaultBinding" contract="SVC2.ISVC2" listenUriMode="Explicit">
              <identity>
                <dns value="localhost" />
                <certificateReference storeName="My" storeLocation="LocalMachine"
                  x509FindType="FindBySubjectDistinguishedName" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" name="" contract="IMetadataExchange"
              listenUriMode="Explicit" />
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:5512/SVC2" />
              </baseAddresses>
              <timeouts openTimeout="00:03:00" />
            </host>
          </service>
    
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- To avoid disclosing metadata information, 
              set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpGetEnabled="true"/>
              <!-- To receive exception details in faults for debugging purposes, 
              set the value below to true.  Set to false before deployment 
              to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>



    Isaias S. Silva


    • Editado Isaias S. Silva sexta-feira, 17 de janeiro de 2014 16:12 edição
    sexta-feira, 17 de janeiro de 2014 16:11
  • Olá isaias,

    Estou tendo exatamento esse mesmo problema. Você conseguiu resolver? como?

    obrigado.

    quarta-feira, 26 de março de 2014 18:22
  • Olá CLEBIO,

    Na verdade o problema do tamanho persiste, o que não lembro exatamente, foi como o contornamos, pois não estou com acesso a solução atualmente.

    Uma dica, é verificar se seu transfer mode esta em streaming.

    Mas de fato esse é um problema que ocorre quando hospedamos o serviço como Windows Service.

    Qualquer dúvida, posta ai pra nós debatermos. Valeu.


    Isaias S. Silva

    segunda-feira, 31 de março de 2014 00:50