让我们假设我正在处理一个涉及发送大量数据的服务。
如果我用WCF实现这一点,WCF是否会根据每个请求需要多少内存来服务来限制服务?或者,每次我的服务收到大量命中时,我都会得到连续的内存不足异常?
我很好奇在WCF之外处理这个问题,我对服务开发还是个新手……
发布于 2009-01-26 16:01:23
虽然像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>
发布于 2009-01-26 15:36:27
WCF确实有一个默认的有效负载大小限制,该限制将拒绝超过一定字节数的消息。当然,这是可以在配置文件的绑定部分进行配置的。下面是一个包含basicHttpBinding
的粗略示例,它向您展示了许多可用的属性:
<bindings>
<basicHttpBinding>
<binding name="testBinding" maxReceivedMessageSize="2147483647">
<readerQuotas
maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
其思想是,您可以创建许多不同的绑定,以用于不同的场景。这很好,因为您可以微调服务的使用方式,并且只增加需要它们的端点的消息大小限制。
发布于 2009-01-26 16:46:10
如果您使用的是NetTCPBinding或NetNamedPipeBinding,则可以使用MaxConnections属性:
<bindings>
<netTcpBinding>
<binding name="myTCPBinding" maxConnections="15"/>
</netTcpBinding>
</bindings>
https://stackoverflow.com/questions/480020
复制相似问题