Можно ли развернуть WebRole в Azure с облачными цифрами, используемыми для вычислений?
Можно ли использовать Code Numerics в Azure только для некоторых вычислений, таких как стандартное отклонение и т. Д., Не используя его распределенные возможности и обходя HPC? Я тестирую веб-роль MVC с некоторой строгой математикой и графиками, я добавил ссылки на сборки Cloud Numerics, и все это работает в эмуляторе (только некоторые вычисления, нет распределенных программ), но когда я делаю ошибки в Azure, он сообщает о проблемах зависимостей с Cloud Цифры дллс? Буду очень признателен за советы. (Я знаю, что было бы лучше просто использовать для этого стандартную математическую библиотеку, но мне действительно нужно знать, возможно ли это таким образом). Сначала я думал, что это может быть проблема архитектуры: весь проект - AnyCpu (это может быть только AnyCpu или x64, поскольку Azure допускает только эти две конфигурации), а некоторые библиотеки CLoud Numerics скомпилированы для x64. Но моя машина для разработки - x64 win 7, и я повторяю: ЭТО РАБОТАЕТ В ЭМУЛЯТОРЕ, но не в облаке.
Вот подробности исключения:
Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[FileNotFoundException: Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.]
System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +567
System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +192
System.Reflection.Assembly.Load(String assemblyString) +35
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +123
[ConfigurationErrorsException: Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11567856
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +485
System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +79
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +337
System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1167
[HttpException (0x80004005): Could not load file or assembly 'Microsoft.Numerics.DistributedDenseArrays.DLL' or one of its dependencies. The specified module could not be found.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11700592
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4868789
Упомянутый dll Microsoft.Numerics.DistributedDenseArrays естественно включается в качестве копии всегда вместе с другими зависимостями, как указано в инструменте обхода зависимостей.
3 ответа
ОК, проблема решена.
Решение: было что-н. отсутствует в Cloud Numerics (еще одна нативная библиотека из установочного каталога Cloud Numerics) и, что еще более интересно: в Web.config была дополнительная ссылка на библиотеку DevExpress Printing.Core, хотя она не была добавлена в качестве ссылки на мой проект. Почему это интереснее? Главным образом потому, что мне пришлось использовать ProcMon на моих WebRoles для подтверждения этого факта, и после того, как я заполнил пробел, я получил гораздо более полезную ошибку, указывающую, какая именно библиотека из Cloud Numerics отсутствует в моем развертывании.
Выводы: ProcMon - очень полезный инструмент, RDP для виртуальных машин Azure бесценен.
Совет: если вы когда-нибудь попытаетесь развернуть проект в Azure, использующий библиотеку CN, не забудьте добавить msmpi.dll из пакета Microsoft HPC в качестве содержимого CopyAlways, также обратите внимание на тип msmpi.dll, на который вы ссылаетесь (x32 или x64).).
Спасибо, ребята, каждый ответ приближал меня к решению. Кредит также принадлежит команде Cloud Numerics Lab, особенно Руни Хугерверфу.
Я бы предложил получить журнал Fusion:
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
Затем вы можете увидеть, откуда он пытается загрузить файл, и точно выяснить, в чем проблема. Если вы не можете определить это, опубликуйте эти подробности здесь, чтобы мы могли на них посмотреть.
Если я сталкиваюсь с подобными проблемами, моя первая проверка состоит в том, есть ли в ссылочных библиотеках свойство copy local = true. Следующим шагом является внедрение настроек en setup. Если вы развертываете только один экземпляр для разработки и тестирования, вы можете использовать RDP для проверки журнала событий.
Чтение введения кодового названия Microsoft "Cloud Numerics" из лаборатории SQL Azure в главе "Необходимые условия", необходим распространяемый пакет Microsoft Visual C++ 2010 SP1 (x64). Это не стандартная реализация на базовой виртуальной машине, предоставляемой Windows Azure. Пакет может быть установлен на вашем компьютере в задаче запуска. Убедитесь, что MSI запускается в режиме без вывода сообщений (взаимодействие с пользователем не требуется).
Михель