Невозможно программно создать клиентский DataCache в Azure только в облаке - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть рабочая роль Azure, которой необходимо использовать кэш в AppFabric.

При локальном запуске (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()

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

На моей сборочной машине выпущен Azure SDK ноября 2011 года и 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 Ответ

1 голос
/ 21 декабря 2011

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

Я обнаружил, что серверы сборки могут запутаться в отношении того, какие DLL-файлы использовать.

...