Мой сервер 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, как отмечено в комментариях.
У вас должно быть что-то отсутствует. Это не будет вашим файлом web.config. У вас нет ссылки на услугу. Как вы добавили ServiceReference? –
Не уверен, поэтому я не отправляю это как ответ, но единственное значение, которое находится под пределом 8K, - 'maxBytesPerRead'. И в MSDN указано «Положительное целое число, которое указывает максимально допустимые байты, возвращаемые на чтение. Значение по умолчанию - 4096. Попробуйте увеличить это значение – Steve
@Steve, ему также нужно установить это значение на клиенте, но в файле конфигурации даже нет ссылки на эту услугу. –