2013-06-28 4 views
0

Я пытаюсь использовать WCF и NetMessagingBinding для публикации сообщений в Windows Service Service Bus тему и для больших сообщений - по крайней мере, 603kb - операция толчка бросает следующее сообщение об ошибке:WCF NetMessagingBinding и исходящие Квота

System.ServiceModel.QuotaExceededException: The maximum message size quota for outgoing messages (262144) has been exceeded. 

Server stack trace: 
    at System.Runtime.BufferedOutputStream.WriteCore(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Xml.XmlBinaryNodeWriter.FlushBuffer() 
    at System.Xml.XmlStreamNodeWriter.GetBuffer(Int32 count, Int32& offset) 
    at System.Xml.XmlStreamNodeWriter.UnsafeWriteUTF8Chars(Char* chars, Int32 charCount) 
    at System.Xml.XmlBinaryNodeWriter.UnsafeWriteText(Char* chars, Int32 charCount) 
    at System.Xml.XmlBinaryNodeWriter.WriteText(String value) 
    at System.Xml.XmlBaseWriter.WriteString(String value) 
    (...) 

Из-за ошибки я заметил, что проблема заключается не в сериализации, и поэтому я не могу использовать Messageformatter. Что еще я могу использовать для преодоления этого исключения? Есть предположения?

Заранее благодарен!

ответ

1

Эта проблема была решена путем замены netMessagingBinding на customBinding, которое использует netMessagingTransport.

1- Добавить netMessagingTransport в качестве вяжущего расширения:

<bindingElementExtensions> 
    <add name="netMessagingTransport" type="Microsoft.ServiceBus.Messaging.Configuration.NetMessagingTransportExtensionElement, Microsoft.ServiceBus, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </bindingElementExtensions> 

2- Добавление пользовательского связывания:

<customBinding> 
    <binding name="sbBindingConfiguration" sendTimeout="00:01:00" receiveTimeout="00:01:00" openTimeout="00:01:00"> 
     <binaryMessageEncoding> 
       <readerQuotas maxDepth="100000000" maxStringContentLength="100000000" 
        maxArrayLength="100000000" maxBytesPerRead="100000000" maxNameTableCharCount="100000000"/> 
    </binaryMessageEncoding> 
     <netMessagingTransport manualAddressing="false" maxBufferPoolSize="100000" maxReceivedMessageSize="100000000"> 
     <transportSettings batchFlushInterval="00:00:00"/> 
     </netMessagingTransport> 
    </binding> 
    </customBinding> 

3- Используйте атрибут MaxReceivedMessageSize, чтобы определить значение, которое подходит размер сообщений которые будут обмениваться

4- Ссылка на ваше обязательное связывание в конечной точке

<endpoint (...) binding="customBinding" bindingConfiguration="sbBindingConfiguration" />