c# - 如何只允许每个用户一个 session

标签 c# asp.net wcf silverlight

我被分配了一项任务来限制单个用户同时使用多个 silverlight 应用程序。理想情况下,每次用户打开新应用程序时,之前的实例都应该收到某种通知并关闭。

Silverlight 应用程序使用通过 REST 端点公开的 WCF 服务来使用数据。 目前,对服务的每次调用都将用户名和密码作为参数。这很好,因为我们有无状态服务。已经有一些应用程序使用了这些服务,我正在寻找最不痛苦的解决方案。

谢谢

最佳答案

好吧,因为我误解了这个问题,所以我赶紧回答。我最初以为您指的是同一台计算机上的实例。

为了防止在同一台计算机上出现多个实例,您可以使用 LocalMessageReceiver Class .

你可以看到一个代码示例here这向您展示了如何防止用户打开应用程序的第二个实例。每个 LocalMessageReceiver 必须有一个唯一的 channel 名称作为构造函数参数。如果构造函数抛出异常,您可以假设存在另一个应用程序实例。

如果您只想保留最后一个应用程序实例并关闭之前的应用程序实例,那么您应该为每个实例创建唯一的 channel 名称,然后发送一条消息告诉其他实例关闭。

为了防止应用程序在不同计算机上的多个实例 我不太有资格回答,但首先想到的是每当用户登录时写入数据库..

如果您的服务不一定要保持无状态,那么您可以在用户每次登录时(例如:登录日期?)在数据库表中保留一个唯一标识符,然后每当用户想要执行某些操作时操作,您可以检查数据库中的最后一个标识符是否与您在当前 session 中拥有的标识符相对应。如果不是,则意味着有人从另一台计算机以同一用户登录,因此您可以使 session 过期。

关于c# - 如何只允许每个用户一个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641306/

相关文章:

c# - 在 C# 中的邮件正文中附加图像

c# - 在 Web 服务中捕获 FaultException

c# - PostSharp 中的依赖注入(inject)

c# - C# 中需要 REGEX 帮助

c# - 从 WindowsAzure.Storage 迁移到 Azure.Storage 包时引用 CloudStorageAccount 中的服务

javascript - 从 safari ASP.NET 下载时出现无法加载资源错误

c# - 下拉绑定(bind)方法不起作用

asp.net - 在 Response.Redirect() 之后调用 Response.End()

c# - WCF CustomBinding 客户端使用的 JAVA Web 服务 - 响应时出现 SAML 证书错误 - 找不到证书?

c# - XAML WPF 如何在 FlowDocument 上添加内嵌背景图像?