WCF服务限制

时间:2009-01-26 14:51:09

标签: c# .net wcf soa throttling

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

如果我使用WCF实现此功能,WCF是否会根据每个请求服务的内存量来限制服务?或者,每当我收到大量点击服务时,我是否会连续出现内存异常?

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

3 个答案:

答案 0 :(得分:13)

虽然使用绑定属性和阅读器配置如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>

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:3)

如果您正在使用NetTCPBinding或NetNamedPipeBinding,则可以使用MaxConnections属性:

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