增加缓存角色的MaxBufferSize



我正试图将一个约60MB的对象放入一个缓存项中,但我经常遇到以下错误

ErrorCode<ERRCA0016>:SubStatus<ES0001>:The connection was terminated, possibly due to server or network problems or serialized Object size is greater than MaxBufferSize on server. Result of the request is unknown.. Additional Information : The client was trying to communicate with the server: net.tcp://127.255.0.0:20004/.

起初,错误指示了一个特定的大小,很明显客户端无法发送这么大的消息,所以我使用愚蠢的增加了客户端中的MaxBufferSize

<transportProperties maxBufferSize="999999999"/>

谷歌搜索和SO搜索提供了有关缓存角色配置的有限资源(大多数结果都提示更改web角色的web.config或类似内容)即使是微软的文档也是有限的。

是否可以增加缓存角色可以缓存的消息的最大大小,如果可以,如何增加?

您只更改了缓存客户端配置设置。可能在您的app.config/web.config下:

<dataCacheClients>
  <dataCacheClient name="default">
    <transportProperties maxBufferSize="XXXXX" />
  </dataCacheClient>
</dataCacheClients>

现在缓存客户端允许调用,但服务器失败了。您还需要为服务器设置maxBufferSize。要执行此

  1. 右键单击您的角色
  2. 添加->新建项目->XML文件
  3. 将其命名为"CacheSettings.xml"
  4. 粘贴以下XML:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
   <section name="dataCache" type="Microsoft.ApplicationServer.Caching.DataCacheSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />
 </configSections>
 <dataCache size="Small">
   <advancedProperties>
     <transportProperties maxBufferSize="XXXX" maxBufferPoolSize="XXXX" />
   </advancedProperties>
 </dataCache>
</configuration>

自2013年7月5日以来,缓存似乎一直存在问题。在一个应用程序上,我们设置了缓冲区大小,这解决了问题,但在另一个应用软件上,这没有帮助。不过,这些错误似乎是暂时的。尽管它不能完全解决问题,但重试会阻止应用程序崩溃。我们放入了类似于下面清单的代码,暂时掩盖了我们遇到的问题。

try
{
    _cache.Value.Put("key", obj);
}
catch (DataCacheException e)
{
    if (e.ErrorCode == 17)
    {
        Thread.Sleep(250);
        _cache.Value.Put("key", obj);
    }
    else
    {
        throw;
    }
}

上面检查的错误17,但16应该是类似的。您还需要在执行此操作时登录,这样您就不会忘记仍然存在问题。

正如Abhinav前面提到的,对象的最大大小是8MB。缓存用于快速访问经常使用的小型对象。如果您确实需要存储大型对象并快速使用它们,则应该考虑表存储。就性能而言,它是最接近Cache的。

或者,将数据存储在不同的块中,并创建一个单例/静态facade接口,该接口可以为您提供单独的组件,或者构造一个具体的对象并根据需要返回它。

序列化后,可以缓存的单个对象的最大大小为8MB。没有办法让缓存库将更大大小的对象放入缓存。

相反,您可以尝试将客户端中的对象拆分为多个(在本例中为6个)对象,但这确实很混乱。

如果你真的不能忍受8MB的限制,你应该在这里提交一个功能请求。

最新更新