为什么DataCache客户端会以这种方式运行?

时间:2014-08-11 21:19:35

标签: c# appfabric-cache

我在Windows Azure上运行了一个缓存实例。我正在从我的Web应用程序连接到它,并通过以下消息获得间歇性异常:

  

ErrorCode:SubStatus:暂时失败。   请稍后重试。 (一个或多个指定的缓存服务器是   不可用,这可能是由繁忙的网络或服务器引起的。对于   内部部署缓存集群,还验证以下条件。   确保已为此客户端授予安全权限   帐户,并检查是否允许AppFabric缓存服务   通过所有缓存主机上的防火墙。还有MaxBufferSize   server必须大于或等于序列化对象大小   从客户发送。)附加信息:客户正在尝试   与服务器通信:   的net.tcp://myserver.cache.windows.net:22234

我已经能够在LinqPad中使用此片段复制问题

var config = new DataCacheFactoryConfiguration
{
    AutoDiscoverProperty = new DataCacheAutoDiscoverProperty(true, "myserver.cache.windows.net"),
    SecurityProperties = new DataCacheSecurity("key", false)
};
var factory = new DataCacheFactory(config);
var client = factory.GetDefaultCache();
//client.Put("foo", "bar");
for (int i = 0; i < 100; i++)
{
    System.Threading.Tasks.Task.Factory.StartNew(o => {
        var i1 = (int)o;
        try
        {
            client.Get("foo").Dump();
        } catch (Exception e)
        {
            e.Message.Dump();
        }
    }, i);
}

如果我按原样运行此代码段,产生超过50个线程,我就会收到错误消息。如果我取消注释初始Put(),我可以用10,000个线程运行它。在运行之前,我确保该条目位于缓存中。我尝试过使用悲观锁定,似乎没有任何效果。我使用过NuGet的最新客户端DLL。我已经尝试将缓存扩展到1GB,除了这个片段之外别无用处。

由于我在我的网络应用程序中的请求是在不同的主题上进行的,我相信这可以合理地模拟我的应用程序中发生的事情。在这两种情况下,我肯定会得到同样的例外。任何人都可以建议避免这种异常的方法吗?是否与构造函数在同一个线程上发生的初始Put()有关?这似乎不太可能,但在这个测试场景中我唯一可以做的就是消除异常。

0 个答案:

没有答案