您可以从Owin自托管Web API restfull服务调用可执行文件

时间:2015-10-02 20:51:14

标签: asp.net-web-api2 exe owin

我正在尝试设置一个自托管的OWIN Web服务,它可以实现可执行流程。

我用来调用执行程序的相同代码作为一个简单的测试控制台应用程序不会从我的自托管服务实例中调用它。我没有看到例外,我没有看到任何类型的日志。不确定什么可能是错的。我开始认为这是不允许的。

        [Route("startApplication/{application}/{parameters}/{workingDirectory}")]
        public IEnumerable<String> startApplication(string application, string parameters, string workingDirectory) {
        logger.logInfo("startApplication restfully called");
        RunResults runResults = new RunResults {
            ...
        };
        application = new Uri(application).LocalPath;      
        try {
            if (File.Exists(application)) {
                using (Process proc = new Process()) {
                    logger.logInfo(String.Format("Attempting to start application: {0}", application));
                    proc.StartInfo.FileName = application;
                    proc.StartInfo.Arguments = parameters;
                    proc.StartInfo.WorkingDirectory = workingDirectory;
                    proc.StartInfo.UseShellExecute = false;
                    proc.StartInfo.RedirectStandardOutput = true;
                    proc.StartInfo.RedirectStandardError = true;
                    proc.OutputDataReceived += (o, e) => runResults.Output.Append(e.Data).Append(Environment.NewLine);
                    proc.ErrorDataReceived += (o, e) => runResults.Output.Append(e.Data).Append(Environment.NewLine);
                    proc.Start();
                    proc.BeginOutputReadLine();                        
                    proc.BeginErrorReadLine();
                    proc.WaitForExit();
                    runResults.ExitCode = proc.ExitCode;
                    logger.logInfo(String.Format("Application has started: {0}", application));
                }
            }
            else {
        ...
            }
        }
        catch (Exception e) {
            ...
        }
        return new string[] { "Hello", "world", "jive", "turkeys" };
    }

我可能没有做对。 我知道你在想什么......这是不安全的。它是一个内部应用程序,只能由正确的安全组中的人员访问。如果您不在,则无法呼叫此控制器。它也将受到我称之为三角形认证的保护。除了这篇文章之外,其中的细节。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在本文中,作者开发了一个Windows服务,它具有完整的操作系统功能,没有像Web服务器那样的安全限制,然后嵌入了自主主机Web API以便与之通信,非常简洁的方法和干净,因为有足够的空间隔离使用的每种技术。希望它会回答你的问题 link