2010年8月9日 星期一

AppFabric Cache Exception.

問題

我在寫入一個大量資料的Cache時,發生如下的錯誤

Microsoft.ApplicationServer.Caching.DataCacheException: 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.

由錯誤訊息得知可以透過 MaxBufferSize 來解決問題。

解法步驟

解決方法,必須同時在 Server 端及 Client 端增加 MaxBufferSize 的設定。

首先是 Server Side

Server Side

Export Cluster Config


Export-CacheClusterConfig -File c:\temp\cluster.config

將Cluster 的設定匯出到一個 xml config 檔。此處我命名為 cluster.config

增加 transportProperties 的設定

依照 Application Configuration Settings 的建議,在上一步驟的cluster.config 增加下面的設定

匯入並套用設定

在匯入設定前,必須先停止 Cluster。匯入設定後,記得再啟動 Cluster。
Stop-CacheCluster
Import-CacheClusterConfig -File c:\temp\cluster.config
Start-CacheCluster

再來是 Client Side

Client Side

在 Client config 加入 transportProperties 設定

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="dataCacheClient"
                    type="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
                        Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, 
                        Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                     allowLocation="true"
                     allowDefinition="Everywhere"/>
    </configSections>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
    <dataCacheClient>
        <hosts>
            <host name="localhost" cachePort="22233"/>
        </hosts>
        <transportProperties maxBufferPoolSize="268435456" maxBufferSize="83886080" />
    </dataCacheClient>
</configuration>

沒有留言:

Share with Facebook