ERR_CONNECTION_RESET 通过 POST 服务在 C# 异步方法中调用 Edge.func 时出错

ERR_CONNECTION_RESET error when calling Edge.func in C# async method through POST service

我还在 Edge 的 github 页面中提出了一个问题,链接在这里 https://github.com/tjanczuk/edge/issues/579

我正在尝试在我的 .NET 应用程序中利用 Edge 运行 一个快速节点程序来进行一些小的视频处理。

我已验证 javascript 有效 - 独立测试 运行ning 'node test.js'。我已经通过创建一个小型 C# 控制台应用程序并测试以查看当我在 CMD (testApp.exe) 中 运行 时是否正确调用和使用了 Edge.func 方法,视频处理通过使用 Edge 的节点进行(确实如此)。

问题是,当我尝试使用 Edge 通过 POST Web 服务 运行 下面显示的异步方法时,我得到了第一个日志 - 'In Edge Task' - 但我从来没有得到底部的日志 - 'in async call' - 客户端我收到一个网络错误,提示失败 net::ERR_CONNECTION_RESET.

public static async Task Start()
{
    LogManager.Instance.WriteLog("In Edge Task");
    var func = Edge.Func(@"
        var ffmpeg = require('fluent-ffmpeg');
        return function (data, callback) {
            var proc2 = ffmpeg('testFile-0.webm')
                .input('testFile-1.webm')
                .on('error', function(err) {
                    callback(null, 'ERRORRRR');
                })
                .on('end', function() {
                    callback(null, '');
                })
                .mergeToFile('merged-fromNET.mp4', 'tempDir');
        }
    ");
    LogManager.Instance.WriteLog("in async call");
    await func(null);
}

如果我从我的测试控制台应用程序调用此异步任务 Start() 方法,它会正常工作...

我已验证我的 post 服务设置正确,因为如果不使用 Start.Wait() 执行此方法,将其注释掉,服务会正确执行。我已经在正确的目录中安装了必要的节点模块和使用的视频文件以及必要的 dll,所以我确信这不是问题所在。

请帮忙,谢谢你的时间。

所以我在这个问题的帮助下找到了我的问题的答案 - Starting a process with credentials from a Windows Service

似乎 Web 服务是使用 "Network Service" 权限执行的,在检查 windows 事件查看器时我遇到了访问冲突 - 这意味着我需要以用户身份执行这段代码适当的权限。因此,我遵循了我链接到的问题中提供的逻辑,以创建一个进程来执行我设置的简单 exe 来执行我发布的代码块。我必须小心地为我的用户提供适当的权限以使用 exe 访问该文件夹,仅此而已。

使用这种技术,似乎可以很容易地设置一个 Web 服务来使用 Edge node.js 逻辑 https://github.com/tjanczuk/edge - 谢谢 tjanczuk