Аналогичные вопросы текут, и я смотрю на них всех. Кажется, никто не решает мою проблему.большой файл через службу WCF
- ОБНОВЛЕНИЕ: -
Я пытаюсь загрузить документ (PDF, DOC, или любой другой) к базе данных с использованием службы WCF. Вызов службы выглядит следующим образом:
using (var cw = new WCFClientWrapper<ICommonService>())
{
cw.Channel.DocumentInsert(content, filename, contentType);
}
Вот подписи для контракта:
[OperationContract]
void DocumentInsert(byte[] content, string fileName, string contentType);
Пожалуйста, обратите внимание, что я передаю массив байтов для содержимого, поскольку это то, что должен быть передан для хранения вещей в БД.
- Конец обновления -
Я могу успешно загрузить небольшой файл (пара кб). Однако, когда я пытаюсь загрузить что-то большее (20kb), я получаю исключение:
Форматировщик бросил исключение при попытке десериализации сообщения: Ошибки в десериализации тела сообщения запроса для операции «DocumentInsert» , Максимальная квота длины массива (16384) превысила при чтении данных XML. Эта квота может быть увеличена на , изменяя свойство MaxArrayLength на объекте XmlDictionaryReaderQuotas , который используется при создании XML-считывателя. Строка 1, позиция 31774.
Ошибка кажется очевидной ... просто перейдите и увеличьте MaxArrayLength. Я сделал это без какого-либо успешного результата. Ниже приведены соответствующие части моих web.configs
Клиент:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="SecureBehavior">
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="WSHttpBinding_Service" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="262144" messageEncoding="Text"
textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="5242880" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://dev.svc.someurl.com/CommonService.svc"
binding="basicHttpBinding"
bindingConfiguration="WSHttpBinding_Service"
behaviorConfiguration="SecureBehavior"
contract="MyApp.Contracts.ServiceContracts.ICommonService"
name="MyApp.Contracts.ServiceContracts.ICommonService">
</endpoint>
</client>
</system.serviceModel>
Услуги:
<system.serviceModel>
<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>
<bindings>
<basicHttpBinding>
<binding name="MyBasicHttpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="MyApp.WCFServices.CommonService">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="MyBasicHttpBinding"
contract="MyApp.Contracts.ServiceContracts.ICommonService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
<service name="MyApp.WCFServices.AccountService">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="MyBasicHttpBinding"
contract="MyApp.Contracts.ServiceContracts.IAccountService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Прикрепление диагностика показывает:
- Служба строительства: нет ошибок/предупреждений
- Открытый сервис: предупреждение - контекст оценки конфигурации не найден - не найдено соответствующего тега. Добавлены конечные точки по умолчанию.
- Слушат 'http://dev.svc.someurl.com/CommonService.svc': нет ошибок/предупреждений
- Обработка сообщений 1: нет ошибок/предупреждений
- Обработка действий " http://tempuri.org/ICommonService/DocumentInsert. : Вызывает исключение, которое я написал в самом начале.
Любая помощь приветствуется.
спасибо за предложение. Не помогло. Мне кажется, что он просто игнорирует мою привязку и использует по умолчанию. Я не уверен, почему и как – Dmitry