存储数据时出现 Azure 缓存异常

本文关键字:Azure 缓存 异常 数据 存储 | 更新日期: 2023-09-27 18:34:25

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

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

这是内部的例外:

System.ServiceModel.CommunicationException: 套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时,或基础网络资源问题引起的。本地套接字超时为"00:00:30"。---> System.Net.Sockets.SocketException:远程主机强制关闭了现有连接 at 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 imimmediate , TimeSpan timeout( ---内部异常堆栈跟踪结束--- at System.ServiceModel.Channels.SocketConnection.Write(Byte[] buffer, Int32 offset, Int32 size, Boolean imimmediate , TimeSpan timeout( at System.ServiceModel.Channels.SocketConnection.Write(Byte[] buffer, Int32 offset, Int32 size, Boolean iminstantte, TimeSpan timeout, BufferManager bufferManager( at System.ServiceModel.Channels.BufferedConnection.WriteNow(Byte[] buffer, Int32 offset, Int32 size, TimeSpan timeout, BufferManager bufferManager( at System.ServiceModel.Channels.BufferedConnection.Write(Byte[] buffer, Int32 offset, Int32 size, Boolean imquite, TimeSpan timeout, BufferManager bufferManager( at System.ServiceModel.Channels.FramemingDuplexSessionChannel.OnSend(Message message, TimeSpan timeout( at System.ServiceModel.Channels.OutputChannel.Send(Message message, TimeSpan timeout( at Microsoft.ApplicationServer.Caching.CacheResolverChannel.Send(Message message, TimeSpan timeout( at Microsoft.ApplicationServer.Caching.WcfClientChannel.SendOnChannel(EndpointID endpoint, TimeSpan& timeout, WaitCallback callback, Object state, Boolean async, IDuplexSessionChannel channel, Message message( ---内部异常堆栈跟踪结束--- at Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ResponseBody respBody( at Microsoft.ApplicationServer.Caching.DataCache.ExecuteAPI(RequestBody reqMsg, IMonitoringListener listener( at Microsoft.ApplicationServer.Caching.DataCache.InternalPut(String key, Object value, DataCacheItemVersion oldVersion, TimeSpan timeout, DataCacheTag[] tags, String region, IMonitoringListener listener( at Microsoft.ApplicationServer.Caching.DataCache.<>c_DisplayClass19.b_18(( at Microsoft.ApplicationServer.Caching.MonitoringListenerFactory.EmptyListener.Microsoft.ApplicationServer.Caching.IMonitoringListener.Listen[TResult](Func'1 innerDelegate( at Microsoft.ApplicationServer.Caching.DataCache.Put(String key, Object value(

问题是这条消息很笼统,没有给出太多细节

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

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

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

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

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

存储数据时出现 Azure 缓存异常

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

在代码中使用重试逻辑,以便在错误提示时重试操作。

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