【问题标题】:Azure: Share object instance between webrole and web serviceAzure:在 webrole 和 Web 服务之间共享对象实例
【发布时间】:2013-01-04 02:01:20
【问题描述】:
我有一个 Azure Webrole,它有一个 MVC 应用程序和一个 WCF 服务。
在 webrole 的“OnStart”方法中,我实例化了一个代表 IOC Container 的静态变量。
之后,当我进行外部服务调用并尝试获取容器时,变量为空...
我是否遗漏了什么,或者为什么该服务无法使用静态?
如果重要的话,我正在运行 Azure SDK 1.8
【问题讨论】:
标签:
wcf
azure
azure-web-roles
【解决方案1】:
我想我知道你的意思。您在 WebRole.cs 类中初始化 IOC 容器,然后尝试在 WCF 服务或托管在 same Web 角色 实例中的 MVC 应用程序中使用它>.
嗯,这是不可能的。您必须知道,WebRole.cs 中运行的代码与您的实际 Web 应用程序(w3wp.exe 中的 MVC 网站/WCF 服务)在不同的进程(WaIISHost.exe)中运行:
这是here详细解释。
如果您想为您的 Web 应用程序初始化 IOC 容器,您应该在 Global.asax 文件中执行此操作。如果您还想在 WebRole.cs 中使用 IOC 容器(在 Web 应用程序启动之前做一些工作),您还需要在 WebRole.cs 文件中对其进行初始化(因为这是 2 个不同的进程)。
【解决方案2】:
如果您的 WebRole 有两个站点/角色,一个用于 MVC 应用程序,一个用于 WCF 服务(检查您的配置),那么您正在同一个 WebRole(云服务 VM)中运行两个独立的应用程序,每个应用程序具有不同的端点.您不能跨应用程序共享静态资源。您还需要在 WCF 服务中实例化一个实例。