2013-02-20 4 views
4

Недавно я начал процесс переноса нашего приложения .NET на облачную службу Windows Azure. Наше приложение сильно зависело от ряда компонентов COM-класса, среди них AspPDF (для производства и обработки PDF) и AspJPEG (для изменения размера изображения). В типичной не облачной настройке IIS я бы просто зарегистрировал библиотеки DLL (используя regsvr32) на нашем производственном сервере, и все будет хорошо!AspPDF и AspJPEG для Windows Azure

В Azure процесс немного отличается, и я отвечу на свой вопрос, чтобы помочь тем, у кого схожие проблемы. Этот метод может использоваться для любой DLL, которая должна быть зарегистрирована на сервере как часть процесса развертывания.

ответ

3

Чтобы зарегистрировать компоненты AspPDF и AspJPEG в облачном сервисе Windows Azure, процесс регистрации DLL должен быть включен в процедуру развертывания. Когда Azure распаковывает приложение, он должен запустить команду для регистрации DLL, это должно быть сохранено на всех виртуальных машинах, чтобы гарантировать, что эти зависимости работают последовательно в облачной среде.

Для этого мы можем указать командный файл, который будет выполнен на целевом сервере. Эта задача определена в файле ServiceDefinition.csdef следующим образом:

<Startup> 
    <Task commandLine="RegisterPersits.cmd" executionContext="elevated" taskType="simple" /> 
</Startup> 

Контекст повышенное исполнение гарантирует, что этот процесс должен проводиться до того, как служба идет жить. Контроллер Azure Fabric будет смотреть в папке BIN для файла .cmd. Вы можете создать .cmd в Блокноте, а затем изменить расширение. Вот содержимое файла .cmd.

chcp 1252>NUL 
regsvr32 /s .\library\asppdf64.dll 
regsvr32 /s .\library\aspjpeg64.dll 
exit /b 0 

Мы вызываем инструмент regsvr32 с параметром/с, это гарантирует, что ответ молчит, то есть без каких-либо всплывающих окон, которые запутывают контроллер ткани. Это важно, так как я потратил много времени на то, чтобы узнать, почему процесс развертывания висит на этапе инициализации ... добавление параметров/s решило эту проблему!

В моем случае я поместил библиотеки DLL в папку с именем library, но вы можете поместить их туда, где вам нравится, если они правильно указаны в файле .cmd. Не забудьте также установить следующие свойства файла для любой библиотеки DLL, указанного в команде запуска в Visual Studio:

Сложение Действие: Content

Копировать в выходной каталог: Всегда

Этот дополнительный процесс для регистрации DLL добавляется почти незначительное количество времени на процесс развертывания. Еще один момент, характерный для AspPDF, - это важность использования правильной версии DLL. Persits выпускает 32-битную и 64-разрядную dll, Azure VM работают в 64-битной среде, поэтому важно зарегистрировать asppdf64.dll в описанном выше процессе, регистрация 32-разрядной DLL вызовет туманную ошибку в вашем приложении. К счастью, вам не нужно приобретать отдельную лицензию для 64-разрядной версии AspPDF.

Я надеюсь, что это поможет другим людям, сталкивающимся с аналогичными проблемами, перенося компоненты класса com, такие как AspPDF на Azure.

+0

Я застрял в этом вопросе какое-то время ... В моем случае мне нужно установить vsredist_x64.exe на сервер. Как проверить правильность выполнения запуска? Я не уверен, что все файлы находятся в правильном месте. Я помещал все файлы зависимостей в папку bin проекта asp.net и делал их «копией всегда». Правильно ли это? – newman

+0

А, я также поместил файл партии (cmd) в папку bin проекта asp.net. Мне интересно, как команда запуска в проекте облачных сервисов находит этот файл (в другом проекте)? – newman

+0

@QFDev Это работает в Паасе? Спасибо – Juanjo

 Смежные вопросы

  • Нет связанных вопросов^_^