0

我正在为我们的 Web 角色集群使用 Azure 的角色内缓存。

我需要使用单独dataCacheClients的以便有不同的和明确设置传输属性配置(maxBufferPoolSizemaxBufferSize)。

问题是每个dataCacheClient总是设置相同的maxBufferPoolSizemaxBufferSize值。它们都设置为dataCacheFactory我首先实例化的值。

<dataCacheClients>
  <dataCacheClient name="DataCache1">
    <autoDiscover isEnabled="true" identifier="MyRoleName" />
    <transportProperties maxBufferPoolSize="6400000" maxBufferSize="256" />
  </dataCacheClient>
  <dataCacheClient name="DataCache2">
    <autoDiscover isEnabled="true" identifier="MyRoleName" />
    <transportProperties maxBufferPoolSize="0" maxBufferSize="10485760" />
  </dataCacheClient>
  <dataCacheClient name="DataCache3">
    <autoDiscover isEnabled="true" identifier="MyRoleName" />
    <transportProperties maxBufferPoolSize="3276800" maxBufferSize="32768" />
  </dataCacheClient>
</dataCacheClients>

每个具体DataCache对象都是从单独的DataCacheFactory实例(包含在静态“管理器”中)实例化的。我也尝试过恢复以编程方式创建缓存客户端,但无济于事。

因此,这是由于 MaxBufferSize 在 256 时太小而引发的异常。

抛出 DataCacheException

调试工厂的时候,可以清楚的看到MaxBufferSize不是256:

MaxBufferSize 调试

我开始拔头发,所以我想出了两个想法:

我怀疑每个数据客户端的StartPortand在所有数据中都是相同的(22233 as和 24233 as ),这让我相信他们可能来自同一个工厂(因此使用相同的设置)。DiscoveryPortAutoDiscoveryPropertiesStartPortDiscoveryPort

此外,DataCacheServerEndpoint每个客户的 20004 也是相同的。也许他们需要不同?

我正在使用 Microsoft.WindowsAzure.Caching 2.4.0.0 和 Azure SDK 2.4。

谁能帮我指出正确的方向?

4

2 回答 2

0

看来您的问题不是客户端站点,而是服务器端。确保服务器上的 maxBufferSize 大小正确,示例配置 msdn

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <!--configSections must be the FIRST element -->
<configSections>
   <!-- required to read the <dataCacheClient> element -->
   <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>

   <dataCacheClient requestTimeout="15000" channelOpenTimeout="3000" maxConnectionsToServer="1">
      <localCache isEnabled="true" sync="TimeoutBased" ttlValue="300" objectCount="10000"/>
      <clientNotification pollInterval="300" maxQueueLength="10000"/>
      <hosts>
         <host name="CacheServer1" cachePort="22233"/>
         <host name="CacheServer2" cachePort="22233"/>
      </hosts>
      <securityProperties mode="Transport" protectionLevel="EncryptAndSign" />
      <transportProperties connectionBufferSize="131072" maxBufferPoolSize="268435456" 
                           maxBufferSize="8388608" maxOutputDelay="2" channelInitializationTimeout="60000" 
                           receiveTimeout="600000"/>
   </dataCacheClient>
</configuration>

Azure 主机配置

于 2014-10-20T09:55:02.930 回答
-1

尝试使用以下代码段:

        // DataCacheFactoryConfiguration encapsulates the datacache client section of the config. 
        DataCacheFactoryConfiguration dcfc1 = new DataCacheFactoryConfiguration("DataCache1");
        DataCacheFactory dcf1 = new DataCacheFactory(dcfc1);
        DataCache dc1 = dcf1.GetDefaultCache();

或者,您可以通过编程方式对其进行配置:

        // This will create an instance of DataCacheFactoryConfiguration from default datacache client in config.
        DataCacheFactoryConfiguration dcfc = new DataCacheFactoryConfiguration();
        //You can then set the buffer size as you wish and create DataCacheFactory and DataCache after that.
        dcfc.TransportProperties.MaxBufferSize = size;
        DataCacheFactory dcf = new DataCacheFactory(dcfc);
        DataCache dc = dcf.GetDefaultCache();

Edit1:我使用两个不同的工厂创建了两个不同的客户端,我可以看到它们都有不同的最大缓冲区大小。

        DataCacheFactoryConfiguration dcfc = new DataCacheFactoryConfiguration();
        dcfc.TransportProperties.MaxBufferSize = 8388608;
        DataCacheFactory dcf = new DataCacheFactory(dcfc);
        DataCache dc = dcf.GetDefaultCache();

        DataCacheFactoryConfiguration dcfc1 = new DataCacheFactoryConfiguration();
        dcfc1.TransportProperties.MaxBufferSize = 8388;
        DataCacheFactory dcf1 = new DataCacheFactory(dcfc1);
        DataCache dc1 = dcf1.GetDefaultCache();
于 2014-10-17T22:25:41.510 回答