Azure SDK 1.4 - WIF. Не удалось загрузить модуль C ++ при попытке инициализировать домен приложения по умолчанию - PullRequest
4 голосов
/ 31 марта 2011

У меня есть старое приложение Azure, которое работало на Azure 1.2 SDK и использует WIF для аутентификации.

Недавно я пытался обновить его до последней версии SDK (1.4).

Приложения компилируются и запускаются в Azure, включая проверку подлинности с помощью моей службы STS. Однако некоторые страницы на сайте просто не будут загружаться, выбрасывая следующие ошибки.

    Unable to find assembly 'Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.



[SerializationException: Unable to find assembly 'Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.]
   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +4767763
   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +1725
   System.AppDomain.get_Id() +0
   <CrtImplementationDetails>.DoCallBackInDefaultDomain(IntPtr function, Void* cookie) +191
   <CrtImplementationDetails>.LanguageSupport._Initialize(LanguageSupport* ) +354
   <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* ) +102

    [ModuleLoadException: The C++ module failed to load while attempting to initialize the default appdomain.
    ]
       <CrtImplementationDetails>.ThrowModuleLoadException(String errorMessage, Exception innerException) +50
       <CrtImplementationDetails>.LanguageSupport.Initialize(LanguageSupport* ) +169
       .cctor() +33

Я убедился, что зависимость WIF установлена ​​для локального копирования - и она работает - некоторые страницы работают!

есть идеи, как решить эту проблему?

Редактировать: ошибка возникает только на страницах, которые обращаются к tablestorage

Ответы [ 2 ]

4 голосов
/ 31 марта 2011

Похоже, что ошибка вызвана вызовом методов из Microsoft.WindowsAzure.ServiceRuntime, который изменяет домен приложения вашей веб-роли.

Чтобы обойти это, вы можете жестко закодировать строку подключения в свое приложение (или использовать web.config) вместо конфигурации Azure.(Действительно плохое решение этой проблемы)

В качестве альтернативы вы можете использовать инструкции по адресу: http://blogs.infosupport.com/blogs/eriko/archive/2011/01/14/adding-assemblies-to-the-gac-in-windows-azure.aspx, чтобы добавить любые сборки, с которыми у вас возникли проблемы, в Azure GAC.

Рекомендуетсячтение, если вы столкнулись с подобной проблемой:

http://social.msdn.microsoft.com/Forums/kk-KZ/windowsazuretroubleshooting/thread/35d37b41-b638-4023-aaab-b8134ac27278

http://blog.smarx.com/posts/how-to-resolve-setconfigurationsettingpublisher-needs-to-be-called-before-fromconfigurationsetting-can-be-used-after-moving-to-windows-azure-sdk-1-3

2 голосов
/ 01 апреля 2011

Так много людей столкнулись с этим. Я полагаю, это должно быть уже FAQ. Однако я не смог найти правильный ответ на stackoverflow. Проблема здесь в том, что наличие Microsoft.IdentityModel.dll в каталоге bin недостаточно. В нескольких местах конфигурация Appdomain не смотрит на / bin, поэтому она должна быть глобальной, установленной в GAC.

Выполните шаги, описанные здесь: http://blogs.infosupport.com/blogs/eriko/archive/2011/01/14/adding-assemblies-to-the-gac-in-windows-azure.aspx. Вкратце, вам нужно будет создать задачу запуска и выполнить эту команду:

gacutil /nologo /i .\Microsoft.IdentityModel.dll  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...