2009-09-10 5 views
2

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

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

[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> 

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

ответ

5

Вы также должны установить «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? Возможно, ваш сервис просто слишком долго реагирует.

Марк

+0

MaxBufferSize и maxBufferPoolSize исправили мою проблему, спасибо! – Tuoski

3

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

+1

Я установить, MaxReceivedMessageSize = "10067108864" в моей конфигурации. – Tuoski

+0

Согласно ссылке, на которую ссылается этот пост, maxReceivedMessageSize является значением Integer. 10,067,108,864 может быть слишком большим для 32-битного Целочисленного значения. –

Смежные вопросы