【问题标题】:WCF Service ThrottlingWCF 服务限制
【发布时间】:2010-10-03 13:28:30
【问题描述】:

假设我正在处理一项涉及发送大量数据的服务。

如果我使用 WCF 实现此功能,WCF 是否会根据每个请求提供服务所需的内存量来限制服务?或者每次我收到大量服务命中时,我是否会持续出现内存不足异常?

我很好奇在 WCF 之外处理这个问题,我对服务开发还是有点陌生​​...

【问题讨论】:

  • 任何 .NET 应用程序都可以生成 OutOfMemory 异常。我也希望有一天能看到智能执行主机,但这似乎需要应用程序和主机之间的另一层通信。如果值得的话,它可能已经存在于 Windows 服务中。

标签: c# .net wcf soa throttling


【解决方案1】:

虽然像 Andrew Hare 所建议的那样使用绑定属性和 readerQuotas 基本上可以为大多数实际用途提供无限大小,但请记住,如果您接受长时间运行的命令,您将遇到其他问题,例如超时,无论如何该服务是如何构建的(是否使用 WCF)。

无论您的消息大小如何,都需要限制 WCF 服务以提高性能,以免被淹没。如果您在 IIS 或 WAS 中托管它,您将拥有这些托管环境的附加内置功能,这将使您的服务更加“高度可用”。但是,您仍然需要注意并发问题。以下 WCF 配置提供了设置一些限制值的示例。

   <system.serviceModel>

    ...

     <behaviors>
       <serviceBehaviors>
         <behavior name="GenericServiceBehavior">
           <serviceTimeouts transactionTimeout="00:09:10"/>
           <serviceThrottling
             maxConcurrentCalls="20"
             maxConcurrentSessions="20"
             maxConcurrentInstances="20"
           />
         </behavior>
       </serviceBehaviors>
     </behaviors>
   </system.serviceModel>

【讨论】:

  • 正是我所追求的。我想我们将在尽可能降低每次调用的内存使用量后经历一个调整阶段:)。很好的答案。
【解决方案2】:

WCF 确实有一个默认的有效负载大小限制,它将拒绝超过一定字节数的消息。这当然可以在配置文件的绑定部分进行配置。这是一个粗略的示例,带有 basicHttpBinding,向您展示了许多可用的属性:

<bindings>
    <basicHttpBinding>
        <binding name="testBinding" maxReceivedMessageSize="2147483647">
            <readerQuotas
              maxDepth="2147483647"
              maxStringContentLength="2147483647"
              maxArrayLength="2147483647"
              maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />
        </binding>
    </basicHttpBinding>

这个想法是您可以创建许多不同的绑定,用于不同的场景。这很好,因为您可以微调服务的使用方式,并且只增加需要它们的端点的消息大小限制。

【讨论】:

  • 我明白你的意思,但如果我能够控制消息的大小,我会的。一定要喜欢图片。
【解决方案3】:

如果您使用的是 NetTCPBinding 或 NetNamedPipeBinding,您可以使用 MaxConnections 属性:

<bindings>
  <netTcpBinding>
    <binding name="myTCPBinding" maxConnections="15"/>
  </netTcpBinding>
</bindings>

【讨论】:

  • 这适用于我,所以+1,但EnocnRoll的回答很清楚。也许下次:(。
  • 是的 - 我只是稍微扩展了他的答案。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多