【问题标题】:Figuring out the required MaxReceivedMessageSize in WCF with NetTcpBinding使用 NetTcpBinding 找出 WCF 中所需的 MaxReceivedMessageSize
【发布时间】:2010-03-23 15:38:01
【问题描述】:

我在 WCF 中使用 NetTcpBinding,我想发送一个不超过 1 MB 大小的流。我已将 MaxReceivedMessageSize 设置为一个非常高的数字,这当然可以正常工作。

但我很好奇:

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

使用 NetTcpBinding 传输流时,会产生什么样的开销?含义:当我发送一个 1 MB 的流时,我的 MaxReceivedMessageSize 必须是多大?

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    设置MaxReceivedMessageSize 允许您调整端点以拒绝过大的消息。当该端点向公众公开时,这可能会特别令人感兴趣,正如我们所知,它拥有相当多的愚蠢和恶意用户。

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

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

    【讨论】:

    • 您从哪里获得“+ 1024 for message envelope”号码?或者这只是一个假设?
    • @Flo - 只是猜测,开销会因情况而异。如果您担心,您可以拦截请求并对其进行测量。哎呀,为了安全起见,为开销添加 8*1024。 ;-)
    【解决方案2】:

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

    WCF 默认保持这些值非常低的原因是为了保护您的服务器免受拒绝服务攻击。如果您在服务器上允许最多 1 MB 或 2 MB 的 maxReceivedMessageSize,攻击者可能会尝试用所有超出该大小的请求字符串来淹没您的服务器,从而导致您的服务器最终耗尽内存。

    WCF 有许多保护措施,例如限制最大并发连接数等,这些都在这种情况下发挥作用。所以提高这个限制就是向坏人打开一点谷仓的门——如果你安全地位于公司防火墙后面,那可能真的不是问题。如果您的服务器在互联网的寒冷、强风中,您可能会面临风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 2011-11-13
      • 2023-03-22
      相关资源
      最近更新 更多