2013-03-12 74 views
0

我有一个节点js脚本在我的web角色中运行Socket.io实现。我可以找到如何启动节点js脚本的唯一方法是在命令提示符下运行它,所以我在web角色中创建了一个后台任务,它在命令提示符下运行脚本。以编程方式从命令提示符启动节点js脚本

我将节点js文件,cmd.exe和节点模块文件的“Copy To Output Directory”属性设置为“Copy If newer”,并且它们正在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中。从这里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脚本样本蔚蓝节点JS应用。我想这跟我上面写的重写代码有关。我应该做些什么改变才能让App.js在启动时运行,并且仍然能够访问我的其他html视图?

感谢

+0

它是app.js的标准是小写,这是如何保存你的文件? – 2013-03-12 13:12:58

+0

是吗?我将它保存为App.js.我会改变这一点,并尝试 – Bitsian 2013-03-12 13:28:55

+0

对不起,这是所有突出的,http://stackoverflow.com/questions/8173232/make-exe-from-node-js-app第二个和第三个解决方案可能有所帮助,但任何进一步建议将是一个猜测 – 2013-03-12 13:47:11

回答

0

在Web角色运行的node.js的最好方法是使用iisnode - 这是一个IIS HTTP模块,IIS重定向请求到node.exe过程,让您使用IIS进程管理与node.js应用程序。

您可以使用windows azure powershell或azure网站轻松完成此操作。详情请参见http://www.windowsazure.com/en-us/develop/nodejs/tutorials/getting-started/

+0

嘿,我已编辑我的问题,你可以相应地更新你的答案。非常感谢 – Bitsian 2013-03-13 13:53:49

0

一种方式做,这将是把所有的静态内容在一个特定的文件夹并添加重写规则绕过重定向到app.js

`

   <!-- All other URLs are mapped to the Node.js application entry point --> 
       <rule name="DynamicContent"> 
        <conditions> 
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/> 
        </conditions> 
        <action type="Rewrite" url="app.js"/> 
       </rule> 
` 
相关问题