我有一个用c#编写的服务器客户端项目。
我想将客户端更改为Web客户端,以便我们可以使用浏览器打开它。所以我决定制作一个WCF休息服务来取代服务器端。我用于服务的绑定是webHttpBinding。
我的问题是服务的行为。每次调用后都会初始化服务数据(vars等)。如果我添加[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
它没有改变任何东西。如果我使用[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
,它可以工作,但我想每个客户端的服务实例都是相同的。
我有一个简单的html网页,从客户端获取用户名和密码并将其发布到服务。该服务使用用户数据库和响应检查登录信息。我的问题是我无法保存用户状态,因为在每次post / get方法之后服务都会被重置。
我该怎么办?
答案 0 :(得分:0)
当尝试通过HTTP维护会话时,这是一个非常标准的问题,这正是webHttpBinding正在使用的。即使你试图强迫它进行会话,也不会。 RESTful服务无法正常工作。
您需要做的高级概述是让服务创建一个令牌,它在初始身份验证时为客户端提供(可能存储在cookie中),然后客户端将随每个请求一起发回。然后,该服务可以使用该令牌来检查客户端是否与每个请求一起登录到特定帐户。您可能希望令牌在一定时间后过期(可能是1个月,1周,1天,10分钟,具体取决于您的申请)。
您可以在此处找到更多信息:
SPA best practices for authentication and session management
Authentication, Authorization and Session Management in Traditional Web Apps and APIs