增加缓存角色的MaxBufferSize

时间:2013-07-15 11:13:57

标签: azure azure-caching azure-configuration

我正在尝试将一个大约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或类似) 即便是微软的文档也是有限的。

是否可以,如果可以的话,增加缓存角色可以缓存的邮件的最大大小?

4 个答案:

答案 0 :(得分:2)

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

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

现在缓存客户端允许调用,但服务器正在失败。您还需要为服务器设置maxBufferSize。要做到这一点

  1. 右键单击您的角色
  2. 添加 - &gt;新商品 - &gt; XML文件
  3. 将其命名为“CacheSettings.xml”
  4. 粘贴以下XML:

  5. <?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>
    

答案 1 :(得分:0)

自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应该是类似的。您还需要在执行此操作时进行记录,这样您就不会忘记仍然存在问题。

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

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

您可以尝试做的是将客户端中的对象拆分为多个(在本例中为6个)对象,但这非常麻烦。

如果你真的不能忍受8 MB限制,你应该提出功能请求here