2013-02-11 1 views
0

Мой сервер ASP.NET предоставляет набор служб WCF, которые используются моим клиентом WPF. Все работало нормально, пока длина поля строки не превысила 8K. Это теперь генерирует следующее исключение на сервере ASP.NET ...ASP.NET хостинг WCF Services, необходимо увеличить MaxStringContentLength, но как?

Ошибка десериализации объекта типа Project.ModelType. Максимальная длина длины длины строки (8192) была превышена, а чтение данных XML. Эта квота может быть увеличена путем изменения свойства MaxStringContentLength 10 объекта XmlDictionaryReaderQuotas , используемого при создании XML-считывателя.

я увеличил значение MaxStringContentLength быть 64K на app.config WPF, но это не решило проблему. Поэтому, я думаю, мне нужно увеличить это значение на стороне ASP.NET. Но у меня нет никаких значений в web.config для изменения! Вот мой web.config, чтобы показать это ...

<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 

    <authentication mode="Forms"> 
     <forms name=".ASPXFTOAUTH" 
      timeout="10" 
      slidingExpiration="true" 
      cookieless="UseCookies"/> 
    </authentication> 

    <membership> 
     <providers> 
     <clear/> 
     </providers> 
    </membership> 

    <customErrors defaultRedirect="~/Error.htm" mode="RemoteOnly"> 
     <error statusCode="404" redirect="~/404.aspx" /> 
    </customErrors> 
    </system.web> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

    <system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
           multipleSiteBindingsEnabled="true" /> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

Как обновить сервер, чтобы указать более высокую MaxStringContentLength значение? Приложение app.config для моего обслуживания выглядит так:

<system.serviceModel> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="BasicHttpBinding_IAccess" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="false" bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="131072" maxBufferPoolSize="524288" maxReceivedMessageSize="131072" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
     <readerQuotas maxDepth="32" maxStringContentLength="65536" 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 binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_IAccess" 
       contract="AccessService.IAccess" 
       name="BasicHttpBinding_IAccess" /> 
    </client> 
</system.serviceModel> 

Любые идеи?

UPDATE:

Мои услуги определяются имеющие класс 'Access.svc'

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class Access : IAccess 
{ 
    // ...IAccess method implementations 
} 

... который имеет следующую разметку ...

<%@ ServiceHost Language="C#" Debug="true" 
       Service="Ecotech.AMS.WebServer.Access" 
       CodeBehind="Access.svc.cs" %> 

... нет ничего особенного в сервисе в web.config, как отмечено в комментариях.

+0

У вас должно быть что-то отсутствует. Это не будет вашим файлом web.config. У вас нет ссылки на услугу. Как вы добавили ServiceReference? –

+0

Не уверен, поэтому я не отправляю это как ответ, но единственное значение, которое находится под пределом 8K, - 'maxBytesPerRead'. И в MSDN указано «Положительное целое число, которое указывает максимально допустимые байты, возвращаемые на чтение. Значение по умолчанию - 4096. Попробуйте увеличить это значение – Steve

+0

@Steve, ему также нужно установить это значение на клиенте, но в файле конфигурации даже нет ссылки на эту услугу. –

ответ

0

Попробуйте щелкнуть «Добавить ссылку на сервис» через меню правой кнопкой мыши вашего проекта. Выполнение этого способа добавит необходимую конфигурационную информацию в ваш файл web.config.

Как только вы сделаете это, вы можете установить свойство maxReceivedMessageSize на свой переплет. Выполнение этого способа наиболее точно отразит то, что вы делаете на стороне обслуживания WCF.

+0

Щелчок правой кнопкой мыши по моему проекту WPF дает ссылку «Добавить ссылку на службу», но щелчок правой кнопкой мыши по проекту ASP.NET не выполняется. Обратите внимание, что ASP.NET - это место, где размещается служба, поэтому я не думаю, что добавление ссылки на службу для себя будет работать. –

0

Место, где вам нужно работать, это веб-конфиг, вам нужно добавить поведение службы, где вы можете установить размер данных. Например, например,

<behaviors> 
     <serviceBehaviors> 
     <behavior name="SilverlightWCFLargeDataApplication"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior> 

     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="SilverlightWCFLargeDataApplication"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 

Если это не сработает, отправьте свой веб-конфигуратор здесь. Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^