如何仅在当前运行的 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 类型?