Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AppFabric DataCacheFactory初始化通常需要约30秒_C#_Asp.net_Appfabric - Fatal编程技术网

C# AppFabric DataCacheFactory初始化通常需要约30秒

C# AppFabric DataCacheFactory初始化通常需要约30秒,c#,asp.net,appfabric,C#,Asp.net,Appfabric,当我初始化客户端以连接到AppFabric的缓存时,在以下线路上连接似乎需要30秒的时间: factory = new DataCacheFactory(configuration); 请参阅下面的完整初始化代码-主要取自。 我说的前后不一致,因为有时需要1秒,有时需要27、28等等。。。秒。我有一个使用AppFabric缓存的asp.net站点,它位于同一域的不同框中。除了连接时间不一致外,一切都很好。当它连接时,一切都很好-我只需要让它在~1秒钟内持续连接:。。。想法 public st

当我初始化客户端以连接到AppFabric的缓存时,在以下线路上连接似乎需要30秒的时间:

factory = new DataCacheFactory(configuration); 
请参阅下面的完整初始化代码-主要取自。 我说的前后不一致,因为有时需要1秒,有时需要27、28等等。。。秒。我有一个使用AppFabric缓存的asp.net站点,它位于同一域的不同框中。除了连接时间不一致外,一切都很好。当它连接时,一切都很好-我只需要让它在~1秒钟内持续连接:。。。想法

public static void Init()
    {
        if (cache == null)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
            try
            {
                //Define Array for 1 Cache Host
                List<DataCacheServerEndpoint> servers = new List<DataCacheServerEndpoint>(1);

                var appFabricHost = ConfigurationManager.AppSettings["AppFabricHost"];
                var appFabricPort = ConfigurationManager.AppSettings["AppFabricPort"].ParseAs<int>();

                //Specify Cache Host Details 
                //  Parameter 1 = host name
                //  Parameter 2 = cache port number
                servers.Add(new DataCacheServerEndpoint(appFabricHost, appFabricPort));
                TraceHelper.TraceVerbose("Init", string.Format("Defined AppFabric - Host: {0}, Port: {1}", appFabricHost, appFabricPort));

                //Create cache configuration
                DataCacheFactoryConfiguration configuration = new DataCacheFactoryConfiguration();

                //Set the cache host(s)
                configuration.Servers = servers;

                //Set default properties for local cache (local cache disabled)
                configuration.LocalCacheProperties = new DataCacheLocalCacheProperties();

                //Disable tracing to avoid informational/verbose messages on the web page
                DataCacheClientLogManager.ChangeLogLevel(System.Diagnostics.TraceLevel.Off);

                //Pass configuration settings to cacheFactory constructor
                factory = new DataCacheFactory(configuration);

                //Get reference to named cache
                cache = factory.GetCache(cacheName);
                TraceHelper.TraceVerbose("Init", "Defined AppFabric - CacheName: " + cacheName);
            }
            catch (Exception ex)
            {
                TraceHelper.TraceError("Init", ex);
            }
            finally
            {
                TraceHelper.TraceInfo("Init", string.Format("AppFabric init took {0} seconds", sw.Elapsed.Seconds));
            }

            if (cache == null)
            {
                TraceHelper.TraceError("Init", string.Format("First init cycle took {0} seconds and failed, retrying", sw.Elapsed.Seconds));
                UrlShortener.Init();    // if at first you don't succeed, try try again ...
            }
        }
    }

如果将所有配置信息保存在.config文件中而不是以编程方式创建配置,是否会更快和/或更一致?有关详细信息,请参阅-我将始终使用此方法,而不是编程配置,因为当某些内容发生更改时,它更易于更新


否则,我认为一般的建议是,由于DataCacheFactory所做的工作(即与集群中的每台服务器建立网络连接),创建DataCacheFactory是一个昂贵的对象。您肯定不希望每次需要从缓存中获取某些内容时都创建DataCacheFactory,相反,您可能希望考虑在应用程序中创建DataCacheFactory,开始时可能是一个单例,然后在整个应用程序中重用该单例,无法解决问题,但可能有助于缓解问题。

如果有帮助,我很乐意提供更多信息?感谢回复-在解决问题之前,我无法将此移到prod。我已经在应用程序启动和重用时调用了Init,所以它是一个单例。一旦Init完成,我就没有问题了,只是初始电位~30秒,这是触发点,请参见此处:。我将按照建议将AppFabric配置移动到web.config中,并会让您知道这是否解决了问题。干杯。嗨,菲尔-我现在在web.config上看到了它,我看到了同样的问题。我甚至看到连接需要4分钟。我猜factory.GetCachexyz有一个内置超时,所以我的代码会一直重试,直到成功。任何其他想法,这是可悲的表现。