3

私は単純なWebサービスを持っています。2つのパラメーターを取ります。1つは単純なxmlセキュリティトークンで、もう1つは通常長いxml文字列です。短い文字列で機能しますが、長い文字列では400エラーメッセージが表示されます。maxMessageLengthは、より長い文字列を許可するために何もしませんでした。

4

2 に答える 2

3

クォータに関する回答の後、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>
于 2008-09-26T12:05:02.187 に答える
2

クォータの制限も削除する必要があります。これは、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;
于 2008-09-25T20:25:36.153 に答える