2011-12-20 3 views
0

У меня есть роль рабочего Azure, которая должна использовать кеш в AppFabric.Невозможно программно создать клиент DataCache в Azure только в облаке

При локальном запуске (Win7x64, VS2010), указывающем на кеш в облаке, он отлично работает.

Когда я раскрываю тот же пакет в облако (опять-таки указывает на тот же кэш), он выдает следующее исключение:

Message:   The type initializer for 'Microsoft.ApplicationServer.Caching.DataCacheClientLogManager' threw an exception. 
Exception Type: TypeInitializationException 
StackTrace:  Microsoft.ApplicationServer.Caching.DataCacheClientLogManager.Initialize(DataCacheLogSink logSink) 
       at Microsoft.ApplicationServer.Caching.DataCacheFactoryConfiguration.Initialize(String clientName) 
       at CommunicationRole.CacheUtil.GetCache() 

посмотрев на код, это происходит, когда эта строка кода удар:

Dim configuration As New DataCacheFactoryConfiguration() 

Ничего не бежит после этой линии. Как я уже сказал, конфигурации между локальными и облачными те же. Я использую кеш с учетными данными как поставщик состояния сеанса в веб-развертывании, поэтому я считаю, что кэш и доступ к нему хороши.

У меня установлена ​​машина November 2011 release of the Azure SDK и установлена ​​Azure AppFabric SDK 1.5.

метод, чтобы получить кэш выглядит следующим образом:

Imports System.IO 
Imports Microsoft.WindowsAzure 
Imports Microsoft.WindowsAzure.ServiceRuntime 
Imports Microsoft.WindowsAzure.StorageClient 
Imports Microsoft.ApplicationServer.Caching 
Imports System.Security 

Public Class CacheUtil 

    Private Shared _factory As DataCacheFactory = Nothing 
    Private Shared _cache As DataCache = Nothing 

    Public Shared Function GetCache() As DataCache 


      If _cache IsNot Nothing Then 
       Return _cache 
      End If 

      '------------------------- 
      ' Configure Cache Client 
      '------------------------- 

      'Define Array for 1 Cache Host 
      Dim servers As New List(Of DataCacheServerEndpoint)() 


      'Specify Cache Host Details 
      ' Parameter 1 = host name 
      ' Parameter 2 = cache port number 
      servers.Add(New DataCacheServerEndpoint(RoleEnvironment.GetConfigurationSettingValue("hostName"), Int32.Parse(RoleEnvironment.GetConfigurationSettingValue("cachePort")))) 

      ' Setup secure key 
      Dim strACSKey As String = RoleEnvironment.GetConfigurationSettingValue("authorisationToken") 
      Dim secureACSKey As New SecureString 
      For Each a As Char In strACSKey 
       secureACSKey.AppendChar(a) 
      Next 
      secureACSKey.MakeReadOnly() 
      Dim factorySecurity As New DataCacheSecurity(secureACSKey) 

      'Create cache configuration 
      Dim configuration As New DataCacheFactoryConfiguration() 

      configuration.Servers = servers 
      configuration.SecurityProperties = factorySecurity 

      '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 called "default" 
      _cache = _factory.GetCache(RoleEnvironment.GetConfigurationSettingValue("cacheName")) 


     Return _cache 
    End Function 

    Public Shared Sub Dispose() 
     If _factory IsNot Nothing Then 
      _factory.Dispose() 
     End If 
    End Sub 

End Class 

ответ

1

Выпуск SDK ноябрь 2011 включает AppFabric .dlls (версия 1.6), поэтому вам больше не нужен отдельный SDK установить только для AppFabric. Я попытался бы выполнить каждый из ваших проектов, удалив ссылки на кеширующие DLL и добавив их обратно, указывая на те, которые находятся под ... \ Windows Azure SDK \ v1.6 \ Cache \ ref

У меня есть что серверы сборки могут запутаться в отношении каких DLL для ссылки.

+1

Спасибо - это привело меня к рассмотрению, какие DLL-файлы, где Copy Local установлены в false. В конце концов я установил параметр «Копировать локальный» в Microsoft.WindowsFabric.Common и Microsoft.WindowsFabric.Data.Common, чтобы быть правдой, и теперь hehe presto все работает. – alergy

+0

что-то еще, что помогло мне никогда не встречаться, - это утилита, которая будет сравнивать ваш файл проекта с текущими сборками в Azure OS. Думайте, что это будет спасателем в будущем: [link] (http://gacviewer.cloudapp.net) – alergy

+1

@alergy Я получал такую ​​же ошибку, но не имел дело с лазурной. После прочтения вашего комментария я бросил эти DLL в корзину, и все сработало! Благодаря :) – Joshua