我在 WebRole 启动期间调用了一个 C# 控制台应用程序来执行自定义检测。我希望该程序能够从服务配置中读取最新值并采取相应措施。
我已经设置了调用我的 .EXE 以在提升模式下运行的启动脚本。我已向控制台应用程序添加了对 Azure 的 ServiceRuntime 的引用,但出现以下错误:角色发现数据不可用
如果您将调用此可执行文件作为 .csdef 中的启动任务,则您要求的信息可能不可用,因为尚未设置角色(请参阅Web/Worker 角色的生命周期)。
如果您在 WebRole.cs 中的 OnStart 内调用可执行文件,这也可能是问题 - 因为 IISConfigurator 是与 OnStart 异步调用的。
对于启动任务,在http://mvolo.com/configure-iis-websites-windows-azure-startup-tasks-appcmd/中详细介绍了一种解决方法(尽管它处理更改 IIS 配置)。
对于 WebRole 问题,您可以重载 Run() 并从那里调用您的可执行文件 - 可能重试如下:
while (!RoleEnvironment.IsAvailable) {
Thread.Sleep(1000);
}
RunExecutable();