WCF - Как принимать длинные строки в качестве параметров - PullRequest
3 голосов
/ 26 сентября 2008

У меня есть простой веб-сервис, он принимает 2 параметра, один из которых - простой xml-токен безопасности, другой - обычно длинную XML-строку. Он работает с короткими строками, но более длинные строки выдают сообщение об ошибке 400. maxMessageLength не сделал ничего, чтобы учесть более длинные строки.

Ответы [ 2 ]

3 голосов
/ 26 сентября 2008

После ответа по квотам я все это сделал в web.config

<bindings>
  <wsHttpBinding>
    <binding name="WSHttpBinding_IPayroll" maxReceivedMessageSize="6553600">
      <security mode="None"/>
      <readerQuotas maxDepth="32" 
                    maxStringContentLength="6553600" 
                    maxArrayLength="16384"
                    maxBytesPerRead="4096" 
                    maxNameTableCharCount="16384" />
    </binding>
  </wsHttpBinding>
</bindings>
2 голосов
/ 26 сентября 2008

Вы должны также удалить ограничения квот. Вот как вы можете сделать это в коде с привязкой Tcp. Я добавил некоторый код, который показывает удаление проблем тайм-аута, потому что обычно отправка очень больших аргументов вызывает проблемы тайм-аута Так что используйте код с умом ... Конечно, вы можете установить эти параметры и в конфигурационном файле.

        NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, true);

        // Allow big arguments on messages. Allow ~500 MB message.
        binding.MaxReceivedMessageSize = 500 * 1024 * 1024;

        // Allow unlimited time to send/receive a message. 
        // It also prevents closing idle sessions. 
        // From MSDN: To prevent the service from aborting idle sessions prematurely increase the Receive timeout on the service endpoint's binding.’
        binding.ReceiveTimeout = TimeSpan.MaxValue;
        binding.SendTimeout = TimeSpan.MaxValue;

        XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas();

        // Remove quotas limitations
        quotas.MaxArrayLength = int.MaxValue;
        quotas.MaxBytesPerRead = int.MaxValue;
        quotas.MaxDepth = int.MaxValue;
        quotas.MaxNameTableCharCount = int.MaxValue;
        quotas.MaxStringContentLength = int.MaxValue;
        binding.ReaderQuotas = quotas;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...