0

目前我在我的 WCF 应用程序中使用 Azure 缓存,将数据放入缓存时出现此异常:

Microsoft.ApplicationServer.Caching.DataCacheException: ErrorCode< ERRCA0017 >:SubStatus< ES0006 >:暂时失败。请稍后重试。(指定的一个或多个缓存服务器不可用,可能是由于网络或服务器繁忙。对于本地缓存集群,还要验证以下条件。确保已为此客户端帐户授予安全权限,并检查 AppFabric所有缓存主机上的缓存服务都允许通过防火墙,服务器端的 MaxBufferSize 必须大于或等于客户端发送的序列化对象大小。)

这是内部异常:

System.ServiceModel.CommunicationException:套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或者是潜在的网络资源问题造成的。本地套接字超时为“00:00:30”。---> System.Net.Sockets.SocketException:现有连接被远程主机在 System.Net.Sockets.Socket.Send(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at System 强制关闭。 ServiceModel.Channels.SocketConnection.Write(Byte[] buffer, Int32 offset, Int32 size, Boolean immediate, TimeSpan timeout) --- 内部异常堆栈跟踪结束 --- 在 System.ServiceModel.Channels.SocketConnection.Write(Byte[ ] 缓冲区、Int32 偏移量、Int32 大小、布尔立即数、TimeSpan 超时)在 System.ServiceModel.Channels。DisplayClass19.b _18() 在 Microsoft.ApplicationServer.Caching.MonitoringListenerFactory.EmptyListener.Microsoft.ApplicationServer.Caching.IMonitoringListener.Listen[TResult](Func`1 innerDelegate) 在 Microsoft.ApplicationServer.Caching.DataCache.Put(String key, Object价值)

问题是这个消息很笼统,没有提供太多细节

我已经尝试将 dataCacheClient 中的 requestTimeout 增加到 2 分钟。这并不能解决问题,所以它不应该因为连接到缓存超时

我知道这也不是因为数据量太大,因为生产服务器上相同数量的数据没有问题(这发生在测试服务器上)。我从本地计算机连接到测试数据库,也没有问题

任何人有任何想法如何解决这个问题?谢谢

下面是我当前对 Azure 缓存的配置

<dataCacheClient name="default" requestTimeout="30000" isCompressionEnabled="true" >
  <localCache isEnabled="true" sync="TimeoutBased" objectCount="4194304" ttlValue="80000" />
</dataCacheClient>
4

1 回答 1

0

请在代码中将ReceiveTimeout 属性设置为 40-50 秒,以避免套接字超时。

如果错误提示,请在代码中设置重试逻辑以重试操作。

如果此问题持续较长时间,请查看缓存实例性能计数器,看看您是否接近 100% 限制或某种意义上的容量最大化,在这种情况下您应该重新评估您的容量,请参阅容量规划注意事项角色内缓存(Windows Azure 缓存)

于 2013-10-15T12:55:49.090 回答