У меня есть HTTPModule, который я использую для перенаправления трафика между веб-сайтом в моем дата-центре и веб-сайтом, работающим на платформе Azure. Этот HTTPModule получает свои правила перенаправления из хранилища таблиц Azure.
Перенаправления работают нормально на моей локальной машине разработчика, а также при работе на Azure. Однако при развертывании модуля на серверах моего центра обработки данных (IIS 7, WS 2008 R2 Standard 64bit, .NET 4.0, ASP.NET 4.0) я получаю следующую ошибку
Parser Error Message: Could not load file or assembly 'msshrtmi' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Line 124: <add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
Line 125: <add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
Line 126: <add assembly="*" />
Line 127: </assemblies>
Line 128: <buildProviders>
Source File: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config Line: 126
"msshrtmi.dll" фактически существует в моем каталоге bin развертывания.
Если я удаляю эту dll, сайт центра обработки данных работает нормально, но HTTPModule не может загрузить свои данные конфигурации из Table Storage и вместо этого выдает следующую ошибку
---> System.TypeInitializationException: The type initializer for 'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'msshrtmi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironment()
at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()
--- End of inner exception stack trace ---
at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.get_IsAvailable()
Кроме того, я вручную включил «Microsoft.WindowsAzure.ServiceRuntime.dll» как часть развертывания, чтобы обеспечить его доступность на серверах центра обработки данных.