WCF - Win App "Превышена максимальная квота длины содержимого строки (8192) при чтении данных XML". - PullRequest
0 голосов
/ 28 июня 2010

Я в растерянности ... не знаю точно, почему это происходит.Я просмотрел по крайней мере 50 страниц в Google и искал StackOverflow для этого ответа.Когда я запускаю этот код, я получаю сообщение об ошибке:

"Произошла ошибка при попытке десериализации параметра http://tempuri.org/:message. Сообщение InnerException было" Произошла ошибка при десериализации объекта типа Application.Interfaces.Mail.MailMessage. Превышена максимальная квота длины содержимого строки (8192) при чтении данных XML. Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML. '"

Вот что у меня есть на службе WCF (сервере):

<system.serviceModel>
  <services>
    <service behaviorConfiguration="SimpleServiceBehavior" name="Application.Services.Mail.Mailer">
      <host>
        <baseAddresses>
          <add baseAddress="http://myapp.com/"/>
        </baseAddresses>
      </host>
      <endpoint bindingConfiguration="BasicHttpBinding_IMailer" bindingName="BasicHttpBinding_IMailer" binding="basicHttpBinding" address="http://myapp.com/" contract="Application.Services.Local.Mail.IEmailer">
        <identity>
          <dns value="myapp.com"/>
        </identity>
      </endpoint>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="SimpleServiceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IMailer" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="800000" maxBufferPoolSize="800000" maxReceivedMessageSize="800000" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
        <readerQuotas maxDepth="800000" maxStringContentLength="800000" maxArrayLength="800000" maxBytesPerRead="800000" maxNameTableCharCount="800000" />
        <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
          <message clientCredentialType="UserName" algorithmSuite="Default"/>
        </security>
      </binding>
    </basicHttpBinding>
  </bindings>
</system.serviceModel>

И что у меня на стороне клиента:

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IMailer" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="5242880" maxBufferPoolSize="524288" maxReceivedMessageSize="5242880" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
        <readerQuotas maxDepth="32" 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://myapp.com/Mail/Mailer.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMailer" contract="Interfaces.Mail.IEmailer" name="BasicHttpBinding_IMailer"/>
  </client>
</system.serviceModel>

1 Ответ

0 голосов
/ 28 июня 2010

Не уверен на 100%, если это проблема - но у вас определенно есть что-то подозрительное с вашими адресами ....

В вашей конфигурации сервера у вас есть:

<baseAddresses>
     <add baseAddress="http://myapp.com/"/>
 </baseAddresses>

и

  <endpoint bindingConfiguration="BasicHttpBinding_IMailer" 
            bindingName="BasicHttpBinding_IMailer" binding="basicHttpBinding" 
            address="http://myapp.com/" 
            contract="Application.Services.Local.Mail.IEmailer">

пока в вашей конфигурации клиента вы используете

<client>
    <endpoint address="http://myapp.com/Mail/Mailer.svc"  ... />
</client>

Так какой же у вас адрес, на самом деле?Если вы размещаете свою службу WCF в IIS, я не думаю, что вам нужно что-либо даже в вашей конфигурации на стороне сервера - ни <baseAddresses>, ни address= на конечной точке действительно не будут иметь большого значения в отношении адреса службывыглядит так - это будет определяться именем вашего сервера и именем виртуального каталога, а также именем и расширением этого * .svc-файла, содержащегося в нем.

Но эти вводящие в заблуждение адреса могут привести к неправильной конфигурации, так чтоваша реальная, фактическая конечная точка не получает никаких пользовательских настроек, но вместо этого будет использовать настройки по умолчанию ...

Попробуйте очистить конфигурацию на стороне сервера - это помогает вообще ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...