【问题标题】:best way to deal huge request in WCF [closed]在 WCF 中处理巨大请求的最佳方法 [关闭]
【发布时间】:2016-07-13 11:01:39
【问题描述】:

一次处理 10k 个请求等大型请求的 WCF 服务的最佳方法。 请提出建议。

编辑:

让我澄清一下,我有大约 10k 个通过以太网连接的硬件设备。现在我必须从设备进行通信。那么在 WCF 中处理这种情况的最佳方法是什么。

【问题讨论】:

  • 你是问每秒的请求数是10k还是返回的传输大小是10k?
  • 不是每秒,但可能在 15/20 分钟内。
  • 答案被搁置,但根据您的硬件,您可能会使用单个 Web/App 服务器,这取决于堆栈中其余组件的速度。性能总是很棘手,因为您总是必须了解问题出在哪里。例如,如果您在 Web 或 App 层中的 CPU 已达到极限,您可以安装负载均衡器并扩展硬件以处理这么多请求。如果您的数据库响应缓慢,您是否在使用连接池,您是否需要更多磁盘、更多内存等。您需要测量每一层的性能并添加您需要的位置。

标签: c# performance wcf design-patterns concurrency


【解决方案1】:

取决于问题是什么以及内容是什么。这还取决于是 10k 的传输(在快速连接上应该不会花费很长时间),还是创建结果。

假设是数据传输。

压缩

您可以尝试启用 GZip 压缩 (WCF Compression) 看看这是否会加快速度。请注意,在进行实际压缩和解压缩时会有一些开销。

流式传输

不确定这是否会加快速度 (WCF Streaming)。

批量提取

如果可能的话,您可以分块获取数据,然后在客户端启动多个线程/任务以检索不同的数据块,然后在所有线程完成后将它们放在一起。如果问题实际上是数据创建,这也可以加快速度。

【讨论】:

  • ,见编辑部分。
【解决方案2】:

如果你想处理巨大的请求,以数据为请求。

为此,您需要更改读者配额。 因为默认情况下 WCF 只能获取 8192 个字符。 所以你需要改变读者配额。

示例:

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2023-03-08
    • 1970-01-01
    • 2014-03-12
    • 2015-12-20
    相关资源
    最近更新 更多