2

我正在尝试将大约 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 或类似内容)甚至 Microsoft 的文档也是有限的。

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

4

4 回答 4

2

您只更改了缓存客户端配置设置。可能在你的 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-10-16T12:15:02.223 回答
0

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

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

于 2013-09-27T11:30:28.477 回答
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 应该类似。您还需要在执行此操作时进行记录,这样您就不会忘记仍然存在问题。

于 2013-07-15T12:40:33.193 回答
-1

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

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

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

于 2013-09-12T20:37:03.020 回答