Ссылка на 64-битную DLL в веб-приложении приложения служб WCF RIA, размещенном в Azure - PullRequest
1 голос
/ 24 августа 2011

У меня есть приложение Silverlight, которое использует службы WCF RIA и размещено в Azure.

В веб-приложении упоминается dll Microsoft Z3:

Если я ссылаюсь на 32-битную версию этой dll, Azureне может разместить его, потому что ему нужна 64-битная версия.Если я ссылаюсь на 64-битную версию, RIA Services не компилируется.

Либо мне нужно найти способ использования 32-битной DLL в Azure, либо мне нужно найти способ ссылаться на 63-битную DLL для RIA Services.

Какие советы по поводу того, какой подход лучше и как?

Спасибо

Сэм

Ответы [ 3 ]

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

Я подумал, что быстро поделюсь своим подходом на тот случай, если кому-нибудь когда-нибудь понадобится сделать это или что-то подобное, поскольку проблемы будут общими для других собственных библиотек C ++ в Azure.

Проблема заключалась вряд вещей: Azure не имеет всех библиотек времени выполнения VC ++, необходимых для Z3;установка Z3, не включающая другие его зависимости в его корзину;Не удается скомпилировать службы Silverlight RIA, если в решении или в папке bin имеются 64-битные библиотеки;Azure не работает 32-битной версии Z3 DLL;Azure не имеет среды выполнения F # и т. Д.

Вот как я это получил:

  1. Абстрагируем интерфейс для кода, который вызывает Z3 (В моем случаес интерфейсом IXxxAnalyzer в XxxAnalyzerCommon.dll)

  2. Не добавляйте конкретную реализацию F # этого интерфейса непосредственно в решение в качестве ссылки, контента или ресурса.

  3. Вместо этого используйте zip-библиотеку .NET для упаковки:

     a. XxxAnalyzer64.dll  (64bit version of the F# implementation of IXxxAnalyzer)
    
     b. XxxAnalyzerCommon.dll
    
     c. FSharp.Core.dll
    
     d. FSharp.PowerPack.dll
    
     e. Microsoft.Z3.dll (64bit version)
    
  4. Добавьте zip-файл в качестве содержимого в веб-проект

  5. Добавьте распространяемый VC ++ (64-битный) vcredist_x64.exe в качестве содержимого для веб-проекта

  6. Создайте задачу запуска Azure, которая автоматически устанавливает Redist VC ++, когда егопервое развертывание.

  7. Создание ресурса локального хранилища Azure в конфигурации роли

  8. При запуске извлеките zip-файл в локальное хранилище (если оноеще не существует)

  9. Используйте MEF (Managed Extensibility Framework) для динамического импорта конкретного IAnalyzer с помощью DirectoryCatalog, указывающего на локальное хранилище - поэтому проекту не нужно иметь какой-либопрямая ссылка или зависимость от XxxAnalyzer64.dll.

Также была проблема с FSharp.PowerPack.dll, которая строго ссылалась на более раннюю версию FSharp.Core.dll, которую мне приходилось использоватьАссамблея RОператор edirect в файле web.config для разрешения.

0 голосов
/ 23 сентября 2013

Одним из способов решения этой проблемы является включение 32-разрядных двоичных файлов в Azure. Это можно сделать, запустив:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true

При запуске. Это можно указать, добавив задачу запуска в определения служб, чтобы запустить ее в сценарии cmd.

0 голосов
/ 26 августа 2011

Предпринимаются попытки сделать Z3 доступным в Azure для других веб-сервисов в целом. Это находится в активной разработке, но это еще не жить. Мы ожидаем, что многие другие веб-сервисы также захотят использовать эту функциональность, поэтому мне было бы очень интересно узнать о ваших требованиях относительно интерфейса с сервисом. Вам требуется инкрементный, высокопроизводительный интерфейс или для вашего приложения достаточно простого текстового файлового интерфейса?

...