Windows Server AppFabricCache, Exception, Проверка версии клиента
Я пытаюсь создать и запустить приложение WindowsServerAppFabricSamples CacheAPISample. Мне пришлось установить Microsoft.WindowsAzure.Caching версии 2.3.1.0 из nuget для сборки. Мой конфиг:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/>
<section name="cacheDiagnostics" type="Microsoft.ApplicationServer.Caching.AzureCommon.DiagnosticsConfigurationSection, Microsoft.ApplicationServer.Caching.AzureCommon" allowLocation="true" allowDefinition="Everywhere"/>
</configSections>
<dataCacheClients>
<dataCacheClient name="default" />
</dataCacheClients>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
Когда я запускаю приложение, я получаю исключение с сообщением:
Проверьте версию клиента. Он должен находиться в пределах допустимого диапазона версий на сервере. При необходимости обновите клиент до разрешенной версии.
Трассировка исключения:
Microsoft.ApplicationServer.Caching.DataCacheException was unhandled
HelpLink=http://go.microsoft.com/fwlink/?LinkId=164049
HResult=-2146233088
Message=ErrorCode<ERRCA0019>:SubStatus<ES0001>:Check the client version. It should be within the allowed version range on the server. If necessary, upgrade the client to the allowed version.
Source=Microsoft.ApplicationServer.Caching.Client
ErrorCode=19
SubStatus=-1
StackTrace:
at Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ErrStatus errStatus, Guid trackingId, Exception responseException, Byte[][] payload, EndpointID destination)
at Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ResponseBody respBody, EndpointID destination)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.EstablishConnection(IEnumerable`1 servers, RequestBody request, Func`3 sendMessageDelegate, DataCacheReadyRetryPolicy retryPolicy)
at Microsoft.ApplicationServer.Caching.WcfClientProtocol.Initialize(IEnumerable`1 servers)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.GetCache(String cacheName, CreateNewCacheDelegate cacheCreationDelegate, DataCacheInitializationViaCopyDelegate initializeDelegate)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.GetCache(String cacheName)
at CacheAPISample.Program.PrepareClient() in c:\Programming\WindowsServerAppFabricSamples\Samples\CS\Cache\CacheAPISample\CacheAPISample\Program.cs:line 617
at CacheAPISample.Program.Main(String[] args) in c:\Programming\WindowsServerAppFabricSamples\Samples\CS\Cache\CacheAPISample\CacheAPISample\Program.cs:line 18
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
Ответственная часть кода:
private void PrepareClient()
{
List<DataCacheServerEndpoint> servers = new List<DataCacheServerEndpoint>(1);
servers.Add(new DataCacheServerEndpoint("localhost", 22233));
DataCacheFactoryConfiguration configuration = new DataCacheFactoryConfiguration();
configuration.Servers = servers;
configuration.LocalCacheProperties = new DataCacheLocalCacheProperties();
DataCacheClientLogManager.ChangeLogLevel(System.Diagnostics.TraceLevel.Off);
myCacheFactory = new DataCacheFactory(configuration);
// Breaks after this comment.
myDefaultCache = myCacheFactory.GetCache("default");
}
В администрировании Windows PowerShell я запустил get-cachehost
команда. Вот что я получил:
HostName : CachePort Service Name Service Status Version Info
-------------------- ------------ -------------- ------------
KOKICA:22233 AppFabricCachingService UP 3 [3,3][1,3]
И серверное, и клиентское приложение работают на одном компьютере с Windows 8.1. AppFabric 1.1 установлен. Зависимости кеша
Microsoft.ApplicationServer.Caching.Client.dll, Microsoft.ApplicationServer.Caching.Core
находятся в
C:\Program Files\Microsoft SDK \Windows Azure.NET SDK\v2.2\ref\ Кэширование
Версия файла 1.0.5137.0. Будем благодарны за любые попытки помочь мне решить эту проблему.
2 ответа
Библиотеки, на которые вы ссылались, предназначены для кэша Azure, тогда как вам нужны клиентские библиотеки для OnPremise Appfabric для Windows Server.
Если вы установили Microsoft Appfabric 1.1 для Windows Server отсюда: http://www.microsoft.com/en-us/download/details.aspx?id=27115, вам нужно щелкнуть правой кнопкой мыши свойства вашего клиентского проекта и обратиться к клиентским библиотекам (Microsoft.ApplicationServer.Caching.Client.dll и Microsoft.ApplicationServer.Caching.Core.dll.) Из c:\Program Files\Windows Server Appfabric или в любую папку, в которую вы его установили. (Во время установки вы должны были установить флажок "установить клиент"
Для получения более подробной информации перейдите по этой ссылке: http://msdn.microsoft.com/en-us/library/hh334398(v=azure.10).aspx
Microsoft Windows Server AppFabric Cookbook, глава Установка клиентских сборок кэша, параграф "Как это работает"... еще раз напомнил мне, точно так же, как @Alfan tiried, чтобы проверить, в девятый раз, версию исполняемого файла службы сервера и версию файла клиентских сборок на диске,
Путаница в том, что я установил AppFabric Cache со страницы центра загрузки MS (...\Program Files\AppFabric 1.1 for Windows Server
), но уже был установлен Windows Azure SDK v2.2 (...\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.2\ref\Caching
). Обе установки имеют файлы Microsoft.ApplicationServer.Caching.Client.dll, Microsoft.ApplicationServer.Caching.Core.dll.
Я ссылался на файлы SDK (v 1.0.5137.0) и версии не совпадали. Я ссылался на сборки из папки AppFabric Cache (v 1.0.4632.0), которая разрешила мою проблему.
Примечание: обе версии файла сообщают один и тот же номер версии при запуске AppDomain.CurrentDomain.GetAssemblies()
из клиентского приложения.