AppFabric Cache - существующее соединение было принудительно закрыто удаленным хостом
Я пытаюсь запустить AppFabric кеш в моей локальной среде разработки. У меня установлена Windows Server AppFabric Beta 2 Refresh, и кластер кэша и хост настроены и запущены в Windows 7 64-bit. Я запускаю свой веб-сайт MVC2 на локальном веб-сайте IIS в пуле приложений v4.0 в интегрированном режиме.
HostName : CachePort Service Name Service Status Version Info
-------------------- ------------ -------------- ------------
SN-3TQHQL1:22233 AppFabricCachingService UP 1 [1,1][1,1]
У меня настроен web.config со следующим:
<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>
<dataCacheClient>
<hosts>
<host name="SN-3TQHQL1" cachePort="22233" />
</hosts>
</dataCacheClient>
Я получаю сообщение об ошибке при попытке инициализировать DataCacheFactory:
protected CacheService()
{
_cacheFactory = new DataCacheFactory(); <-- Error here
_defaultCache = _cacheFactory.GetDefaultCache();
}
Я получаю желтый экран ошибки ASP.NET со следующим:
Существующее соединение было принудительно закрыто удаленным хостом
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.Net.Sockets.SocketException: существующее соединение было принудительно закрыто удаленным узлом
Ошибка источника:
Line 21: protected CacheService()
Line 22: {
Line 23: _cacheFactory = new DataCacheFactory();
Line 24: _defaultCache = _cacheFactory.GetDefaultCache();
Line 25: }
3 ответа
У меня была похожая проблема, и моя проблема была в том, что я не дал надлежащие разрешения клиенту кеша. Чтобы быстро убедиться, что это проблема, я бы предоставил всем учетным записям доступ к кешу. Если это решит проблему, тогда изучите ограничение доступа к соответствующей учетной записи, а не ко всем. Это можно выполнить, выполнив следующую команду через "Кэширующий администратор Windows PowerShell", который находится в папке "Пуск" Windows Server AppFabric:
Grant-CacheAllowedClientAccount everyone
У меня тоже была эта проблема, и я нашел ответ в этой теме:
Ответ:
Вы видите эту ошибку из-за несоответствия свойств безопасности между клиентом и сервером.
В своем клиентском коде вы отключили защиту (Mode=None и PotectionLevel=None), тогда как сервер кэширования использует mode=Transport и PotectionLevel=EncryptAndSign (по умолчанию в битах Beta2Fresh).
Выполните одно из следующих действий:
1) В коде клиента используйте безопасность по умолчанию, то есть configuration.SecurityProperties = new DataCacheSecurity ();
2) Отключите защиту на сервере, чтобы она соответствовала существующему клиентскому коду. Использовать командлет Powershell Set-CacheClusterSecurity -SecurityMode None -Защита Level None
Вы получаете ту же проблему, если вы используете объект DataCacheFactoryConfiguration? например
protected CacheService()
{
DataCacheFactoryConfiguration config;
List<DataCacheServerEndpoint> endpoints;
DataCacheFactory factory;
DataCache cache;
endpoints = new List<DataCacheServerEndpoint>();
endpoints.Add(new DataCacheServerEndpoint("SN-3TQHQL1",22233));
config = new DataCacheFactoryConfiguration();
config.Servers = endpoints;
factory = new DataCacheFactory(config);
cache = factory.GetDefaultCache();
...
}
Вы открыли порт на вашем брандмауэре?
Возможно, проверьте записи в ваших журналах событий - они могут предложить подсказки относительно того, что происходит (или не происходит).