【问题标题】:Getting the full local path of a file in a site node in a webrole within a startup cmd file?在启动 cmd 文件中的 webrole 中获取站点节点中文件的完整本地路径?
【发布时间】:2011-10-20 22:01:14
【问题描述】:

现在已经丢失了几个小时,我只是不明白。

情况: - 将 ASP.net 应用程序迁移到 Azure - 重要:这是一个包含多个网站的 webrole,所有网站都编译在一个文件夹“azure.builds”中,所以我的网站绑定就像 物理目录=“..\azure.builds\www.mywebsite.com” 物理目录=“..\azure.builds\cb.mywebsite.com” 等等

我有一个在我的开发机器上运行良好的 cmd 脚本,它在 IIS 上设置了在 exe 文件上执行的权限(它必须由 html 表单调用)。

这是我的本地代码 startup.cmd,它适用于我的本地 IIS:

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+"[name='MY_GCI', path='.exe',verb='' ,modules='CgiModule', scriptProcessor='c:\websites\myproject\azure.builds\cb.mywebsite.com\cgi-bin\mymodule.exe',resourceType='Either']"

在我的 html 表单中,该文件是通过操作“http://cb.mywebsite.com/cgi-bin/mymodule.exe”调用的,并猜测它的工作原理。

但在我迁移到 Azure 时却没有,我无法为这个特定文件设置权限。问题是我无法计算出 EXE 文件的完整路径,如上例所示。

我试过这个(%ROLEROOT%):

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+"[name='MY_GCI', path='.exe',verb='' ,modules='CgiModule', scriptProcessor='%ROLEROOT%\azure.build\cb.mywebsite.com\cgi-bin\mymodule.exe',resourceType='Either']"

不起作用。 我研究了几个涉及类似 CGI 设置的示例(例如运行 PHP),但困难在于 EXE 模块必须在 http://cb.mywebsite.com/cgi-bin/mymodule.exe 上公开,这甚至不是我的 azure webrole 上的主根网站,所以这并不完全相同。

对不起,如果不是很清楚理解,简而言之:如何在启动cmd文件中的webrole中找到特定站点节点中特定文件的完整本地路径?

【问题讨论】:

    标签: azure cgi


    【解决方案1】:

    您似乎在 Azure 之外拥有此值:

    scriptProcessor='c:\websites\myproject\azure.builds\cb.mywebsite.com\cgi-bin\mymodule.exe

    现在您需要 Azure 中的等价物。这样做的关键是使用 ROLEROOT 环境变量。

    您似乎已经考虑过 ROLEROOT,但在映射到您的目录结构方面可能有一点偏差。我建议你 RDP 进入 Azure 实例并获得导向(看看 e:\approot 作为初学者,但你不能保证总是在那里,因此需要使用 ROLEROOT)。 RDP:http://msdn.microsoft.com/en-us/library/windowsazure/gg443832.aspx

    如果您的真正问题与“......困难在于 EXE 模块必须在 http://cb.mywebsite.com/cgi-bin/mymodule.exe 上公开,这甚至不是我的 azure webrole 上的主根网站,所以这不完全相同。”那么我不确定我是否可以提供帮助,因为我不确定您所描述的问题。但有一个想法:在 RDP 中(如上所述)并尝试在 Azure 中手动执行 CGI 脚本,看看效果如何。如果这不起作用,则可能是路径或权限问题。如果它确实工作,您仍然可能遇到与权限相关的问题(因为 RDP 帐户将比您的默认 IIS 用户拥有更多的权力)。

    要尝试的其他几件事:使用 ServiceDefinition.csdef 中的以下设置确保您的 Azure Web 角色以提升的权限运行:

    <WebRole name="WebHost">    
        <Runtime executionContext="elevated"/>
    ...
    

    还可以考虑通过 ServiceDefinition.csdef 运行提升的启动任务:

    <Startup>
      <Task commandLine="startup.cmd" executionContext="elevated" />
    </Startup>
    

    最后,还有一些启动任务调试技巧:

    http://blog.smarx.com/posts/windows-azure-startup-tasks-tips-tricks-and-gotchas

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多