如何仅在当前运行的 Windows 会话上制作 Grapevine REST 服务器

Posted

技术标签:

【中文标题】如何仅在当前运行的 Windows 会话上制作 Grapevine REST 服务器【英文标题】:How to make Grapevine REST Server only on current running Windows Session 【发布时间】:2018-08-24 14:39:25 【问题描述】:

我在 Windows 会话(用户 A)上的 C# 应用程序中运行 Grapevine REST 服务器(Grapevine 的当前实现依赖于 System.Net.HttpListener 公开的功能),例如在 localhost:8888 上。

如果我让用户 A 会话保持打开状态并运行可执行文件并登录到新的用户 B 会话,我会在 localhost:8888 访问我的 REST 服务器。

我们可以在启动它的会话上限制对 REST 服务器的访问吗?

【问题讨论】:

“会话”是指将其限制为当前登录的用户?这样如果您在 Windows 上切换用户,新用户就无法访问仍在运行的实例? @ScottOffen 是的 【参考方案1】:

Grapevine 使用 .NET 中内置的HttpListener,您可以使用RestServer 类的Advanced 属性直接访问和配置它。

var server = new Grapevine.Server.RestServer();
var listener = server.Advanced; // This is an HttpListener object

如果您使用开箱即用的HttpListener,您可以通过任何方式配置身份验证。 AuthenticationSchemes 属性可能是一个很好的起点。

如果传统的身份验证方法不适合您的用例,您可能希望尝试在应用程序启动时获取登录用户,然后在 server.Router.BeforeRouting 上添加一个事件处理程序,如果请求不是来自该用户。我自己还没有真正尝试过,但这就是我会去的地方。

【讨论】:

以上是关于如何仅在当前运行的 Windows 会话上制作 Grapevine REST 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何使 c# windows 窗体应用程序仅在单台 PC 上运行?

如何在 Windows 上获取 Active Desktop 类型?

如何从Windows服务启动进程到当前登录的用户会话

如何从 Windows 服务启动进程到当前登录的用户会话

错误:`#elif with no expression` - 仅在 Windows 上发生

在使用 emacsW32 的 windows 上关闭当前窗口 (x) 时,如何保持 emacs 服务器运行?