在asp.net MVC上创建Azure存储表

时间:2009-06-13 09:25:18

标签: asp.net-mvc azure azure-storage

我正在关注此博文,以创建一个azure存储表: http://blogs.msdn.com/jnak/archive/2008/10/28/walkthrough-simple-table-storage.aspx

它在asp.net webform web_role上运行良好。

我使用asp.net mvc作为Web角色重新创建了同一个项目,并且它始终在应用程序启动时失败。这一行:

StorageAccountInfo account = StorageAccountInfo.GetDefaultTableStorageAccountFromConfiguration();

似乎始终无法获取帐户共享密钥。

如果我将该行从全局asax应用程序启动移动到default.aspx,它可以正常工作。

  • 与webform相比,在azure asp.net mvc中初始化存储表有什么不同吗?
  • 为什么我不能在应用程序启动时获得azure appsettings?

  • 这是来自事件查看器

    的错误调用堆栈
    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)
    

    2 个答案:

    答案 0 :(得分:2)

    查看http://msdn.microsoft.com/en-us/library/microsoft.servicehosting.serviceruntime.rolemanager.aspx上的“备注”:

      

    Windows Azure结构运行IIS 7.0   在集成模式下。在整合   模式,Application_Start事件   不支持访问请求   上下文或成员   由RoleManager类提供   Windows Azure SDK运行时API。如果你   正在编写一个ASP.NET应用程序   访问请求上下文或   调用RoleManager类的方法   从Application_Start事件中,你   应修改它以初始化   Application_BeginRequest事件   代替。

         

    有关如何使用的示例   Application_BeginRequest事件,   请参阅PersonalWebSite示例   附带Windows Azure SDK。

    答案 1 :(得分:0)

    如果您使用:

    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"/>