常见异常(Windows Server AppFabric 缓存)
当在缓存客户端方法调用期间发生错误时,缓存客户端将引发 DataCacheException 类的实例。ErrorCode 属性包含错误的类型。
每个缓存客户端 API 都有可能会遇到几种常见错误的一种:
您的应用程序代码应该设计为预见这些错误。以下信息提供了有关每个错误的其他详细信息,帮助您适当处理每种情况。
Timeout
发生超时时,引发错误代码为 Timeout 的 DataCacheException 对象。超时表示此缓存客户端没有在配置的超时设置内获得来自服务器的响应。这可能由多种问题导致,如客户端和服务器之间的网络问题。
但请注意,即使出现超时错误,服务器仍可能已成功处理了请求的操作,这非常重要。例如,考虑某个应用程序拥有一个 requestTimeout
设置为 10000 毫秒的缓存客户端。该应用程序调用 Add API 来添加新缓存项目。如果调用时间超过十秒,则该应用程序将收到超时错误。但是,服务器可能已经完成了此添加操作,并且它在超时过去之前无法响应客户端。在错误处理程序中,应用程序应该考虑此可能性。如果错误处理程序仅仅是尝试再次添加对像,则可能导致错误代码为 KeyAlreadyExists 的另一异常。
根据应用程序的设计要求,您可以延长或缩短缓存客户端超时的持续时间。有关如何配置超时持续时间的详细信息,请参阅配置缓存客户端超时(Windows Server AppFabric 缓存)。
RetryLater
RetryLater 错误代码表示缓存群集暂时不能完成请求。例如,在管理员配置缓存群集时,可能会遇到此错误。
对于这种错误类型,应观察 DataCacheException 对象的 SubStatus 属性值,这一点很重要。此属性提供了解释失败原因的其他详细信息。例如,如果缓存群集停止,则引发的 DataCacheException 会将 ErrorCode 属性设置成 RetryLater,并将 SubStatus 属性设置成 CacheServerUnavailable。请注意,如果缓存群集上不允许与请求关联的 Windows 帐户或者缓存主机上的防火墙未正确配置,则会看到相同的 SubStatus 值。
当一个或多个目标服务器可用内存不足时,也可能出现 RetryLater 错误代码。在这种情况下,SubStatus 属性设置为 Throttled。许多因素都可能导致缓存服务器受到限制。
使用
get-cacheconfig
Windows Powershell 命令检查缓存设置。查找EvictionType
设置为None
而非LRU
的缓存。如果禁用逐出,则当服务器内存不足时,缓存群集无法逐出缓存项。使用 Windows 任务管理器或性能监视器查找缓存服务器上可能使用可用内存的其他进程。
检查应用程序的缓存使用情况。插入对象的平均速率、对象大小及其超时值都是构成缓存群集上所需内存总量的因素。
考虑使用自定义区域。一个区域只能位于一个缓存服务器上,因此不能将某个区域中的项目在所有缓存主机之间传播。如果一个或多个较大区域位于一个缓存服务器上,则即使其他缓存服务器具有可用内存,该服务器也可能处于限制状态。
ConnectionTerminated
ConnectionTerminated 错误代码表示缓存客户端和缓存群集之间的连接已被中止。导致此错误的可能原因有很多,包括网络错误或关闭缓存服务器。因为具有超时错误,所以 ConnectionTerminated 错误没有反映请求操作的成功或失败。错误处理程序应该预见到这两种可能性。
另请参阅
概念
异常处理概述(Windows Server AppFabric 缓存)
2011-12-05