0

WCF と NetMessagingBinding を使用してメッセージを Windows サービス サービス バス トピックにパブリッシュしようとしていますが、大きなメッセージ (少なくとも 603kb) の場合、プッシュ操作で次のエラーがスローされます。

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)
   (...)

エラーから、問題はシリアライゼーションではないことに気付きました。そのため、メッセージ フォーマッターを使用できません。この例外を克服するために他に何が使えますか? 何かご意見は?

前もって感謝します!

4

1 に答える 1

1

この問題は、netMessagingBinding を netMessagingTransport を使用する customBinding に置き換えることで解決されました。

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" />
于 2013-08-01T10:54:51.497 に答える