Максимальный размер стека служб ReceivedMessageSize

У меня есть сервис, написанный с использованием сервисного стека v3.9. Я пытаюсь вернуть большой набор результатов и получаю внутреннюю ошибку сервера 500 на моем клиенте. Если я посмотрю на детали ошибки, я увижу, что результаты перечислены в исключении, но усекаются после 65536 символов. Я знаю, что это ограничение по умолчанию, установленное .net. Чего я не знаю, так это как увеличить его для сервисного стека.

Мой клиент не подключается к службе с помощью привязки в веб-конфигурации, поскольку он использует стек службы. Для вызовов веб-API это похоже на то, где вы могли бы решить эту проблему, увеличив maxReceivedMessageSize в привязке. Я предполагаю, что есть какой-то способ увеличить этот предел и для сервисного стека?


person Ben Tidman    schedule 11.12.2014    source источник


Ответы (1)


ServiceStack не накладывает никаких ограничений или квот, поэтому любые ограничения, с которыми сталкиваются ваши службы, относятся к IIS/ASP.NET, которые могут быть увеличены так же, как и любое другое веб-приложение ASP.NET.

В приведенном ниже примере конфигурации Web.Config показано, как увеличить лимит запросов до 1 ГБ как в IIS6, так и в IIS7:

<configuration>
    <system.web>
        <httpRuntime maxRequestLength="1048576" />
    </system.web>
</configuration>

Для IIS7 и выше вам также необходимо добавить следующие строки:

 <system.webServer>
   <security>
      <requestFiltering>
         <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
   </security>
 </system.webServer>
person mythz    schedule 11.12.2014
comment
Спасибо за ответ. Я добавил это в обе мои веб-конфигурации (клиент и сервис), и у меня все еще возникает та же проблема. Есть ли у вас другие предложения? Я уверен, что мой сервис работает. Если я вызываю ту же службу с параметрами, которые возвращают меньший набор результатов, все работает. Большой набор результатов дает внутреннюю ошибку сервера. См. стек вызовов, добавленный к вопросу. - person Ben Tidman; 11.12.2014
comment
@BenTidman Трассировка стека клиента бесполезна, она просто говорит, что Служба выдала исключение. Было бы полезнее предоставить необработанный HTTP-ответ (т. е. использовать что-то вроде Fiddler или WebInspector). В основном вам нужно выяснить, какая квота была превышена, чтобы определить, какая конфигурация ASP.NET нуждается в обновлении. - person mythz; 11.12.2014
comment
Попытка использовать скрипача и неудача. Я вижу запрос ajax, который я делаю из браузера в веб-приложение. Запрос не отображается для обслуживания веб-приложения. Что я делаю неправильно? Все работает в режиме локальной отладки через vs. Означает ли это, что запрос не достигает уровня, который мог бы подобрать Fiddler? - person Ben Tidman; 11.12.2014
comment
@BenTidman Узнайте, как настроить приложения .NET для использования Fiddler. - person mythz; 11.12.2014
comment
Воспользовался вашим советом и сузил тему еще больше. Пожалуйста, посмотрите редактирование, чтобы узнать, можете ли вы помочь дальше. Спасибо - person Ben Tidman; 11.12.2014
comment
@BenTidman Задайте новый вопрос, поскольку он не имеет ничего общего с исходным вопросом. Для будущих вопросов убедитесь, что вы включили всю соответствующую информацию в определение проблемы, так как это было невозможно определить иначе. - person mythz; 12.12.2014
comment
Готово, если вы хотите продолжить помогать, см.: stackoverflow.com/questions/27432418/ - person Ben Tidman; 12.12.2014
comment
@BenTidman Единственное, что я бы посоветовал, это преобразовать его в UTC в DTO или вернуть в формате строки. - person mythz; 12.12.2014