2

~60MB のオブジェクトを 1 つのキャッシュ アイテムに入れようとしていますが、常に次のエラーが表示されます。

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 に答える