如何检查 Node.js 服务是否为 运行 - 在我的例子中是 Azurite 模拟器?
How to check whether a Node.js service is running - in my case Azurite emulator?
我正在开发一个应该 运行 在 Azure 中的 C# 应用程序。我想使用 Azurite emulator 在本地进行测试。我想要实现的是:让我的测试检测 Azurite 是否 运行ning,如果不是 运行ning,则快速中止并显示一条漂亮的错误消息。
Node.js 上 运行 显然是蓝铜矿。
使用旧的 Microsoft Azure 存储模拟器,我可以这样检查它:
public static class AzureStorageEmulatorDetector
{
public static bool IsRunning()
{
const string exePath = @"C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe";
if (!File.Exists(exePath))
return false;
var processStartInfo = new ProcessStartInfo {FileName = exePath, Arguments = "status", RedirectStandardOutput = true};
var process = new Process {StartInfo = processStartInfo};
process.Start();
process.WaitForExit();
var processOutput = process.StandardOutput.ReadToEnd();
return processOutput.Contains("IsRunning: True");
}
}
我想用 Azurite 完成类似的事情。
我是这样安装 Azurite 的:
npm install -g azurite
我运行是这样的:
azurite --silent --location C:\temp\Azurite --debug c:\temp\Azurite\debug.log
我注意到 Azurite 命令行应用程序没有参数告诉我它是否已经 运行ning。当我从控制台启动 Azurite 时,我在任务资源管理器中看不到任何名为“azurite”的进程或服务。所以我不知道我应该检查什么进程。
编辑:显然 Node.js 上的蓝铜矿 运行。确实有一个过程叫做 node.exe
运行ning,但这不是充分条件。我可以查询我的 运行ning Node.js 实例并让它告诉我它在做什么吗?
我在 Windows.
有人知道吗?
受 Ivan Yang 和 this answer 评论的启发,我这样做了:
private static bool IsAzuriteRunning()
{
// If Azurite is running, it will run on localhost and listen on port 10000 and/or 10001.
IPAddress expectedIp = new(new byte[] {127, 0, 0, 1});
var expectedPorts = new[] {10000, 10001};
var activeTcpListeners = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners();
var relevantListeners = activeTcpListeners.Where(t =>
expectedPorts.Contains(t.Port) &&
t.Address.Equals(expectedIp))
.ToList();
return relevantListeners.Any();
}
编辑:或者,在他们的 GitHub 上查看此线程以了解其他可能性:https://github.com/Azure/Azurite/issues/734
我正在开发一个应该 运行 在 Azure 中的 C# 应用程序。我想使用 Azurite emulator 在本地进行测试。我想要实现的是:让我的测试检测 Azurite 是否 运行ning,如果不是 运行ning,则快速中止并显示一条漂亮的错误消息。
Node.js 上 运行 显然是蓝铜矿。
使用旧的 Microsoft Azure 存储模拟器,我可以这样检查它:
public static class AzureStorageEmulatorDetector
{
public static bool IsRunning()
{
const string exePath = @"C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe";
if (!File.Exists(exePath))
return false;
var processStartInfo = new ProcessStartInfo {FileName = exePath, Arguments = "status", RedirectStandardOutput = true};
var process = new Process {StartInfo = processStartInfo};
process.Start();
process.WaitForExit();
var processOutput = process.StandardOutput.ReadToEnd();
return processOutput.Contains("IsRunning: True");
}
}
我想用 Azurite 完成类似的事情。
我是这样安装 Azurite 的:
npm install -g azurite
我运行是这样的:
azurite --silent --location C:\temp\Azurite --debug c:\temp\Azurite\debug.log
我注意到 Azurite 命令行应用程序没有参数告诉我它是否已经 运行ning。当我从控制台启动 Azurite 时,我在任务资源管理器中看不到任何名为“azurite”的进程或服务。所以我不知道我应该检查什么进程。
编辑:显然 Node.js 上的蓝铜矿 运行。确实有一个过程叫做 node.exe
运行ning,但这不是充分条件。我可以查询我的 运行ning Node.js 实例并让它告诉我它在做什么吗?
我在 Windows.
有人知道吗?
受 Ivan Yang 和 this answer 评论的启发,我这样做了:
private static bool IsAzuriteRunning()
{
// If Azurite is running, it will run on localhost and listen on port 10000 and/or 10001.
IPAddress expectedIp = new(new byte[] {127, 0, 0, 1});
var expectedPorts = new[] {10000, 10001};
var activeTcpListeners = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners();
var relevantListeners = activeTcpListeners.Where(t =>
expectedPorts.Contains(t.Port) &&
t.Address.Equals(expectedIp))
.ToList();
return relevantListeners.Any();
}
编辑:或者,在他们的 GitHub 上查看此线程以了解其他可能性:https://github.com/Azure/Azurite/issues/734