WCF服务限制问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

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

如果我使用WCF实现这一点,WCF会根据每个请求需要多少内存来限制服务?或者,每当我收到大量匹配到我的服务时,我是否会持续发生内存不足异常?

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

提问于
用户回答回答于

虽然使用绑定属性和readerQuotas(如Andrew Hare)所建议的,对于大多数实际用途而言,它们基本上可以具有无限大小,但请记住,如果接受长时间运行的命令,则会遇到其他问题,例如超时,无论该服务如何(使用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>
用户回答回答于

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

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

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

扫码关注云+社区