Проблема Appfabric с конструкцией DataCacheFactory
После обновления до Visual Studio 2015 мой клиент AppFabric, размещенный в службе Windows, больше не запускается. Исключение выдается из конструктора DataCacheFactory, когда служба запускается, а фабрика инкапсулируется в одноэлементный класс Cache. вот исключение.
04.08.2015 21:51:47 Ошибка запуска службы: System.TypeInitializationException: инициализатор типа для ioService.IoService вызвал исключение. ---> Microsoft.ApplicationServer.Caching.DataCacheException: ErrorCode:SubStatus: временный сбой. Пожалуйста, попробуйте позже. (Один или несколько указанных серверов кэширования недоступны, что может быть вызвано загруженностью сети или серверов. Убедитесь, что для этой учетной записи клиента в кластере предоставлено разрешение безопасности и что служба кэширования AppFabric разрешена через брандмауэр на всех хостах кэша. Повторите попытку позже.) В Microsoft.ApplicationServer.Caching.ClientDRM.InitializeCasClient(строковый идентификатор, TimeSpan chnlOpenTimeout) в Microsoft.ApplicationServer.Caching.DataCacheFactory.InitDrm() в Microsoft.ApplicationServer.Caching.DataCacheFact.ctorFact.Cache..ctor()
При возврате старых сгенерированных сборок Visual Studio 2013 он снова запускается, и ни одна строка кода не отличается!! Просто дважды проверил, файлы конфигурации также точно так же.
Я действительно понятия не имею, что делать дальше, и поскольку информация о appfabric не очень популярна, я спрашиваю здесь. Кто-нибудь испытывал то же самое?
вот код, если это помогает:
internal class Cache
{
private static volatile Cache mCache = null;
private static object SyncRoot = new object();
private DataCache mArticleCache;
// FAULTING INSIDE CONSTRUCTOR...
private DataCacheFactory mCacheFactory = new DataCacheFactory();
public static Cache Instance
{
get
{
if (mCache == null)
{
lock (SyncRoot)
{
if (mCache == null) // search DCLP for why 2x if
mCache = new Cache();
}
}
return mCache;
}
}
public DataCache ArticleCache
{
get { return mArticleCache; }
}
private Cache()
{
mArticleCache = mCacheFactory.GetCache(ConfigurationManager.AppSettings["Cache.ArticleCacheName"]);
try
{
mArticleCache.CreateRegion(ConfigurationManager.AppSettings["Cache.ArticleRegionName"]);
}
catch (DataCacheException dcex)
{
if (dcex.ErrorCode != DataCacheErrorCode.RegionAlreadyExists)
throw dcex;
}
}
}
обновление: после включения трассировки на уровне службы appfabric средство просмотра трассировки службы Microsoft отображает следующую ошибку:
Значение maxOutboundConnectionsPerEndpoint, вероятно, слишком низкое. Как можно изменить это число в AppFabric?
обновление 2
Файлы проекта разные. Это старый раздел для appfabric
<Reference Include="Microsoft.ApplicationServer.Caching.Client">
<HintPath>..\..\..\..\temp\AppFabric\Microsoft.ApplicationServer.Caching.Client.dll</HintPath>
</Reference>
<Reference Include="Microsoft.ApplicationServer.Caching.Core">
<HintPath>..\..\..\..\temp\AppFabric\Microsoft.ApplicationServer.Caching.Core.dll</HintPath>
</Reference>
И новый раздел
<Reference Include="Microsoft.ApplicationServer.Caching.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\temp\AppFabric\Microsoft.ApplicationServer.Caching.Client.dll</HintPath>
</Reference>
<Reference Include="Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\temp\AppFabric\Microsoft.ApplicationServer.Caching.Core.dll</HintPath>
</Reference>
Версия и publickeytoken теперь включены, и добавлен ложный тег SpecificVersion.