4

我正在关注这篇博文来创建一个 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?

  • 这是来自事件查看器的错误调用堆栈

    异常信息:
        异常类型:HttpException
        异常消息:未指定帐户密钥!
    
    索取资料:
        请求网址:http://127.0.0.1:5100/do.__rd_runtime_init__?shutdownEvent=1B671B93FD-4153-4834-9D5D-595EFC6C19EE1D
        请求路径:/do.__rd_runtime_init__
        用户主机地址:127.0.0.1
        用户:  
        是否经过身份验证:假
        认证类型:  
        话题帐号名:*****
    
    线程信息:
        线程 ID:6
        话题帐号名:*****
        是否冒充:假
        堆栈跟踪:在 System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
       在 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext,HttpContext 上下文,MethodInfo[] 处理程序)
       在 System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态,MethodInfo[] 处理程序,IntPtr appContext,HttpContext 上下文)
       在 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext 上下文)
       在 System.Web.HttpApplicationFactory.GetPipelineApplicationInstance(IntPtr appContext,HttpContext 上下文)
       在 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)
    
    4

    2 回答 2

    2

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

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

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

    于 2009-06-13T19:23:57.637 回答
    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"/>
    
    于 2011-03-31T13:24:05.470 回答