代码之家  ›  专栏  ›  技术社区  ›  Ankit

WCF maxBytesPerRead限制为4096

  •  2
  • Ankit  · 技术社区  · 16 年前

    我在蒸汽模式下使用基本WCF web服务从服务器下载文件。

    我已将服务器端的绑定指定为

         <basicHttpBinding>
            <binding name="DBUpdateServiceBinding" closeTimeout="23:59:59"
               openTimeout="23:59:59" receiveTimeout="23:59:59" sendTimeout="23:59:59"
               maxReceivedMessageSize="10067108864" messageEncoding="Mtom"
               transferMode="Streamed">
               <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                  maxBytesPerRead="8192" maxNameTableCharCount="16384" />
            </binding>
         </basicHttpBinding>
    

    我的客户端绑定xml看起来像

      <bindings>
         <basicHttpBinding>
            <binding name="ws" closeTimeout="23:59:59" openTimeout="23:59:59"
               receiveTimeout="23:59:59" sendTimeout="23:59:59" maxReceivedMessageSize="10067108864"
               messageEncoding="Mtom" transferMode="Streamed">
               <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                  maxBytesPerRead="8192" maxNameTableCharCount="16384" />
               <security>
                  <transport realm="" />
               </security>
            </binding>
         </basicHttpBinding>
      </bindings>
    

    我正在尝试使用下载文件

       byte[] buffer = new byte[32768];
       while (true)
       {
          int read = serverStream.Read(buffer, 0, buffer.Length);
          if (read <= 0)
             break;
          fs.Write(buffer, 0, read);
       }
    

    尽管我已经指定了maxBytesPerRead=“8192”,但我在一个调用中可以读取的最大字节数只有4096。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Johann Blais    16 年前

    除非您有非常特定的安全性要求,否则您可能需要考虑将最大大小设置为It32。MaxValue。这将为您节省一些调试时间。然后,如果需要,将其调低到更合理的值。

    推荐文章