我按照这篇博客文章创建一个天蓝色存储表: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)
    
    有帮助吗?

    解决方案

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

    Windows Azure Fabric在集成模式下运行IIS 7.0。在集成模式下,Application_start事件不支持访问请求上下文或Windows Azure SDK运行时API提供的Rolemanager类成员。如果您正在编写一个ASP.NET应用程序,该应用程序从Application_start事件访问Rolemanager类的请求上下文或调用方法,则应将其修改以在Application_BeginRequest事件中初始化。

    有关显示如何使用Application_BeginRequest事件的示例,请参见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"/>
    
    许可以下: CC-BY-SA归因
    不隶属于 StackOverflow
    scroll top