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

用nettcpbinding计算wcf中所需的maxReceivedMessageSize

  •  3
  • flayn  · 技术社区  · 15 年前

    我在wcf中使用nettcpbinding,我想发送一个大小不超过1 MB的流。我已经将MaxReceivedMessageSize设置为一个非常高的数字,当然效果很好。

    但我很好奇:

    将MaxReceivedMessageSize设置为一个非常高的数字是否有任何(负面)影响,或者将其设置为刚好高于我实际要发送/接收的大小是否有用?

    当使用nettcpbinding传输流时,我可以期望什么样的开销?意思:当我发送1 MB的流时,我的maxReceivedMessageSize必须有多大?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Sky Sanders    15 年前

    设置 MaxReceivedMessageSize 允许您调整端点以拒绝过大的消息。当该端点暴露于公众面前时,这可能会引起特别的兴趣,正如我们所知,这在愚蠢和恶意用户中占有相当的份额。

    通常,如果您知道最大消息大小,那么应该使用它。

    有些人可能会有所不同,但在我看来,1MB=1048576字节(1024*1024)。我还将为诸如消息信封之类的附带事件添加一个缓冲区。苏1048576+1024= 1049600个 对于预期的1MB消息,似乎是一个合理的大小。

        2
  •  3
  •   marc_s    15 年前

    如果要将大小为1 MB的文件发送到服务器,则 maxReceivedMessageSize 服务器上的大小必须至少为1 MB(无论您是将其计算为100万字节,还是10的20次方=1'048'576)。

    WCF默认情况下保持这些值很低的原因是为了保护您的服务器免受拒绝服务攻击。如果允许最多1 MB或2 MB 最大接收消息大小 在您的服务器上,攻击者可以尝试向您的服务器发送一系列最大化该大小的请求,从而最终导致您的服务器耗尽内存。

    WCF有许多保护措施,比如限制最大并发连接数等,这些都在这种情况下发挥作用。因此,提高这一限制只会对坏人打开一点点谷仓门——如果你安全地位于企业防火墙后面,这可能不是问题,真的。如果你的服务器在互联网的冷风中,这可能是你运行的一个风险。