Создание таблицы хранилища Azure в asp.net MVC
-
13-09-2019 - |
Вопрос
Я следую этому сообщению в блоге, чтобы создать таблицу хранилища Azure:http://blogs.msdn.com/jnak/archive/2008/10/28/walkthrough-simple-table-storage.aspx
Он отлично работает с asp.net webform web_role.
Я заново создал тот же проект, используя asp.net mvc в качестве веб-роли, и при запуске приложения всегда происходит сбой.эта линия:
StorageAccountInfo account = StorageAccountInfo.GetDefaultTableStorageAccountFromConfiguration();
кажется, всегда не удается получить общий ключ учетной записи.
Если я перенесу строку из global asax application start в default.aspx, она будет работать отлично.
Это стек вызовов ошибок из средства просмотра событий
Exception information: Exception type: HttpException Exception message: No account key specified! Request information: Request URL: http://127.0.0.1:5100/do.__rd_runtime_init__?shutdownEvent=1B671B93FD-4153-4834-9D5D-595EFC6C19EE1D Request path: /do.__rd_runtime_init__ User host address: 127.0.0.1 User: Is authenticated: False Authentication Type: Thread account name: ***** Thread information: Thread ID: 6 Thread account name: ***** Is impersonating: False Stack trace: at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) at System.Web.HttpApplicationFactory.GetPipelineApplicationInstance(IntPtr appContext, HttpContext context) at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)
Решение
Ознакомьтесь с "замечаниями" по адресу http://msdn.microsoft.com/en-us/library/microsoft.servicehosting.serviceruntime.rolemanager.aspx:
Windows Azure Fabric запускает IIS 7.0 в интегрированном режиме.В интегрированном режиме событие Application_Start не поддерживает доступ к контексту запроса или к членам класса RoleManager, предоставляемого API среды выполнения Windows Azure SDK.Если вы пишете ASP.NET приложение , которое обращается к контексту запроса или вызывает методы класса RoleManager из события Application_Start, вам следует изменить его для инициализации в Событие Application_BeginRequest вместо этого.
Пример, показывающий, как использовать событие Application_BeginRequest, смотрите в примере сайта PersonalWebSite, который поставляется вместе с Windows Azure SDK.
Другие советы
Если вы используете:
StorageAccountInfo account = StorageAccountInfo.GetDefaultTableStorageAccountFromConfiguration();
Обычно информация об учетной записи указывается в файле Web.conf.
<add key="TableStorageEndpoint" value="http://127.0.0.1:10002/devstoreaccount1" />
<add key="AccountName" value="devstoreaccount1" />
<add key="AccountSharedKey" value="YOUR ACCOUNT KEY PROVIDED BY AZURE"/>