我的网络角色中有一个运行 Socket.io 实现的节点 js 脚本。我能找到的关于如何启动节点 js 脚本的唯一方法是在命令提示符下运行它,所以我在 web 角色中创建了一个后台任务,它在命令提示符下运行脚本。
我将节点 js 文件、cmd.exe 和节点模块文件的“复制到输出目录”的属性设置为“如果较新则复制”,它们是在 bin 文件夹中生成的。如果我手动启动 bin 文件夹中的 cmd.exe 并运行命令“node App.js”,它可以工作,socket.io 正在侦听的端口正在运行。但是当我像下面这样以编程方式运行命令时它不起作用。
它不会抛出任何错误,所以我不知道它是否在我的代码中存在问题,或者我们无法像这样启动节点 js 脚本。有什么方法可以查明命令是否正确执行?因为进程启动时没有打开 cmd 提示窗口。非常感谢任何指导、建议或想法。谢谢
public class BackgroundThread
{
public static void Start()
{
var appRoot = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"\", @"approot");
ProcessStartInfo psi = new ProcessStartInfo();
psi.CreateNoWindow = false;
psi.FileName = Path.Combine(appRoot, "bin", "cmd.exe");
psi.Arguments = "node app.js";
psi.UseShellExecute = false;
psi.WorkingDirectory = Path.Combine(appRoot, "bin");
try
{
Process p = Process.Start(psi);
}
catch (Win32Exception ex)
{
Console.WriteLine(ex.ToString());
Console.WriteLine(ex.StackTrace);
Console.WriteLine(ex.Source);
Console.WriteLine(ex.ErrorCode);
}
}
}
编辑:
原来iisnode可以处理所有事情,我只需要在web.config中放置一个重写代码。从这里的示例 azure node js 应用程序http://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/我得到了这个重写代码
<rewrite>
<rules>
<clear />
<rule name="app" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="iisnode.+" negate="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="App.js" />
</rule>
</rules>
</rewrite>
它会自动启动 App.js,但会将我的所有视图重新定向到 App.js 脚本。我想这与我上面写的重写代码有关。我应该进行哪些更改才能让 App.js 在启动时运行并且仍然能够访问我的其他 html 视图?
谢谢