WCF - 如何接受长字符串作为参数

时间:2008-09-25 20:14:38

标签: wcf web-services

我有一个简单的Web服务,它需要2个参数,一个是简单的xml安全令牌,另一个通常是一个长xml字符串。它适用于短字符串,但较长的字符串会产生400错误消息。 maxMessageLength没有做任何事情来允许更长的字符串。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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;