You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows窗体应用中设置transferMode为Streamed并解决消息大小超限问题

解决WCF消息大小配额超出问题

核心问题

你当前的app.config里basicHttpBinding存在两个同名的binding节点(name="aName"),这会导致配置冲突——WCF会优先加载后面那个空的未配置参数的binding,你修改的第一个带security的binding根本没被用上,这就是为什么改了配置也没用。

修正步骤

  1. 删除basicHttpBinding下重复的空<binding name="aName" />节点,避免配置覆盖
  2. 在保留的binding节点中添加readerQuotas配置(仅设置maxReceivedMessageSize不够,消息内容的元素数量、字符串长度等超限也会触发错误)
  3. 确保endpoint绑定的是正确的binding配置

修正后的完整配置

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <!-- 只保留一个配置完整的binding节点 -->
            <binding name="aName" 
                     maxReceivedMessageSize="67108864" 
                     transferMode="Streamed">
                <security mode="aWord" />
                <!-- 添加readerQuotas放宽内容限制 -->
                <readerQuotas maxDepth="32"
                              maxStringContentLength="67108864"
                              maxArrayLength="16384"
                              maxBytesPerRead="4096"
                              maxNameTableCharCount="16384" />
            </binding>
        </basicHttpBinding>
        <customBinding>
            <binding name="anotherName" >
                <textMessageEncoding messageVersion="Soap12" />
                <httpsTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="theAdress"
            binding="basicHttpBinding" bindingConfiguration="aName"
            contract="aNamePortType" name="EndpointName" />
        <!-- other endpoints -->
    </client>
</system.serviceModel>

额外注意事项

  • 如果你的代码里是手动创建WCF客户端实例(而非直接用Visual Studio生成的客户端),请确保代码中配置的binding参数和app.config一致,或者直接在代码中设置所有参数,示例代码如下:
var binding = new BasicHttpBinding("aName");
// 确保代码中也配置了足够大的参数
binding.MaxReceivedMessageSize = 67108864;
binding.ReaderQuotas.MaxStringContentLength = 67108864;
binding.TransferMode = TransferMode.Streamed;

var client = new YourServiceClient(binding, new EndpointAddress("theAdress"));
  • 若仍有问题,检查服务返回的消息是否真的是通过你配置的这个endpoint传输的,确认没有其他同名endpoint或binding干扰。

内容的提问来源于stack exchange,提问作者leGato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 19:02:38