我正在尝试将一个大约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或类似) 即便是微软的文档也是有限的。
是否可以,如果可以的话,增加缓存角色可以缓存的邮件的最大大小?
答案 0 :(得分:2)
您只更改了缓存客户端配置设置。可能在您的app.config / web.config下:
<dataCacheClients>
<dataCacheClient name="default">
<transportProperties maxBufferSize="XXXXX" />
</dataCacheClient>
</dataCacheClients>
现在缓存客户端允许调用,但服务器正在失败。您还需要为服务器设置maxBufferSize。要做到这一点
<?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。