如何从RoleEntryPoint访问在WebRole上运行的所有站点

时间:2013-03-19 15:58:59

标签: azure log4net azure-web-roles log4net-configuration

我们将多个站点部署到单个WebRole。

<Sites>
  <Site name="Web">
    <Bindings>
      <Binding name="EndpointA" endpointName="Internal" />
    </Bindings>
  </Site>
  <Site name="Web2" physicalDirectory="Web2">
    <Bindings>
      <Binding name="EndpointB" endpointName="EndpointB" />
    </Bindings>
  </Site>
</Sites>

如果我理解正确,您可以访问主站点,例如:

public class WebRole : RoleEntryPoint 
{
    public override void Run()
    {
        while (true)
        {
            // Reconfigure log4net every 10 minutes
            log4net.Config.XmlConfigurator.Configure();
            Thread.Sleep(60000);
        }
    }
}

但是如何为WebRole上运行的每个站点执行log4net.Config.XmlConfigurator.Configure()?

顺便说一句

log4net.config文件存储在Azure blob存储中。

编辑:

log4net.Config.XmlConfigurator.Configure()将根据App.config或Web.config读取正确的log4net blob。具体来说:已将一个ConfigureFromBlob()添加到log4net实现中。

如果应用程序是在本地安装的,则ConfigureFromFile()将自动监视log4net.config文件以进行更改,并在需要时重新配置。 ConfigureFromUri()和ConfigureFromBlob()无法执行此操作,因此需要手动重新配置log4net.config更改。

对于Windows Azure,我猜最好的地方是Run()方法。

1 个答案:

答案 0 :(得分:0)

由于您要将站点配置为在不同的应用程序池中运行,因此您需要在单个应用程序的global.asax.cs文件中为每个应用程序检测log4net全局静态变量