情况:对于使用SignalR的Web应用程序,为了将消息从服务器(Azure WebRole)发送到浏览器,我需要在将每条消息发送到浏览器之前访问浏览器cookie。在发送消息之前,cookie将包含一些信息来处理/解码消息(由于访问解码算法的复杂性,我无法在java脚本中执行此操作)。 该方案将是在服务器中准备好消息后立即访问cookie - >解码消息 - >发送消息。
问题:在我要发送给浏览器的每封邮件之前,请求浏览器向我提供Cookie是否有意义?或者它是否破坏了SignalR的整体想法(成为一个始终连接的tcp)? 如果它确实有意义,那么我该怎么做呢?如何访问集线器中的cookie?
如果无法做到这一点,那么我必须将解码信息存储在服务器的某个持久存储中。
P.S:我对SignalR很陌生,如果这个问题太天真,请原谅我。答案 0 :(得分:2)
Cookie似乎是将不可变数据从客户端传递到SignalR服务器的合理方式。您可以从Hub内部读取cookie,如下所示:
public void MyHubMethod()
{
Cookie cookie = Context.Request.Cookies["cookieName"];
// ...
}
请注意,Context.Request
引用的请求将在WebSockets的情况下运行很长时间,因此在启动SignalR连接后,不要期望获取可能对cookie进行的任何更改。