Слишком длинная строка для WCF - PullRequest
2 голосов
/ 10 сентября 2009

Я пытаюсь отправить длинную строку WCF, длиной около 64 тыс. Символов. При отправке длинной строки я получаю ошибку HTTP 400. Но когда я отправляю более короткую строку, все работает нормально. Вот интерфейс WCF и app.config, которые я использую.

Мой контракт сообщения:

[MessageContract]
public class MessageClass
{
    [MessageHeader(MustUnderstand = true)]
    public string id;

    [MessageBodyMember(Order=1)]
    public string realMessage;   // Long string
}

Я попытался изменить настройки app.config, увеличив значения:

<bindings>
  <basicHttpBinding>
    <binding
      name="ws"
      transferMode="Streamed"
      messageEncoding="Mtom"
      maxReceivedMessageSize="10067108864">
      <readerQuotas
        maxDepth="32"
        maxStringContentLength="2147483647"
        maxArrayLength="2147483647"
        maxBytesPerRead="4096"
        maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

Есть ли другое значение, которое я должен изменить?

Ответы [ 2 ]

5 голосов
/ 10 сентября 2009

Вам также нужно установить «maxBufferSize» и «maxBufferPoolSize» для вашей привязки:

<bindings>
  <basicHttpBinding>
    <binding
      name="ws"
      transferMode="Streamed"
      messageEncoding="Mtom"
      maxReceivedMessageSize="10067108864"
      maxBufferSize="500000" maxBufferPoolSize="500000">
      <readerQuotas
        maxDepth="32"
        maxStringContentLength="2147483647"
        maxArrayLength="2147483647"
        maxBytesPerRead="4096"
        maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

Они также по умолчанию равны 64 КБ в стандартных привязках WCF. Однако, так как вы используете "TransferMode = Streamed", это действительно не должно быть проблемой - может быть, что-то еще происходит. Как насчет увеличения параметра sendTimeout? Возможно, ваша служба просто слишком долго реагирует.

Марк

3 голосов
/ 10 сентября 2009

См. Атрибут maxReceivedMessageSize в basicHttpBinding @ http://msdn.microsoft.com/en-us/library/ms731361.aspx. По умолчанию, по умолчанию 65 536 КБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...