SignalR 2.2.2 Asp.Net 4.5 Web 应用程序 - 无权访问 Hub class 中的响应对象

SignalR 2.2.2 Asp.Net 4.5 Web Application - Don't have access to the response object in Hub class

我正在使用 SignalR 2.2.2 Asp.Net 4.5 Web 应用程序。我想访问客户端调用者的当前 http 响应对象,但不知道如何访问。如何引用响应对象?我试过 Context.Request.GetHttpContext().Response,但它出错说 "It does not exist in the current context"。有人可以帮我指出正确的方向吗?

出于几个原因,SignalR 不允许用户直接写入 HttpResponse Stream,即使您找到了这样做的方法,也不是一个好主意:

  • 当使用 WebSockets 传输时,SignalR 使用 webSockets 发送消息,因此写入 HttpResponse 将不起作用(并且不可能)
  • SignalR 使用自己的基于 JSON 的协议,如果您直接编写任何内容,您很可能会创建客户端无法处理的无效 SignalR 消息

如果您想通过 SignalR 发送 PDF,您需要能够将其保存到流中(例如 MemoryStream)并使用从该流创建的数组调用客户端。 (请注意,您使用的 SignalR 版本使用的是基于 JSON 的协议,因此发送二进制数据效率非常低 - 最好使用 SignalR 让客户知道他们可以下载 PDF,然后客户端将使用例如 HTTP GET 请求下载它)