在回调时HttpContext为空,XSockets回调
本文关键字:回调 XSockets 为空 HttpContext | 更新日期: 2023-09-27 18:16:29
我使用XSockets在ASP之间进行通信。. NET网站和一些服务器。当我通过XSockets从服务器接收回调时,我想通知ASP的前端。. NET网站使用Response()
.
我的主Default.aspx.cs
页面看起来像这样:
// I want to access all these variables in the callback method
public HttpContext ctx;
public HttpSessionState session;
public int _theNumber;
public static CommHandler _commHandler
private void Page_Load(object sender, System.EventArgs e)
{
_theNumber = 4; // Random number
ctx = HttpContext.Current;
_commHandler = new CommHandler( ...
aPromptCallback: PromptCallback
...) //The callback, amongst othr parameters
session = HttpContext.Current.Session; //Try to access this in callback
HttpContext.Current.Session["SomeClass"] = _someObject;
}
CommHandler
基本上发送数据到一些服务器使用XSockets,并期望(异步)一些数据的回复。
在相同的Default.aspx.cs
中,我有一个按钮单击的函数,定义如下:
protected void Deploy(object sender, EventArgs e)
{
_commHandler.SendData()
}
CommHandler使用XSockets Send()
方法发送数据。当CommHandler接收到数据时,触发内部的回调,调用PromptCallback()
现在PromptCallback()
在同一个Default.aspx.cs
文件中定义如下:
protected void PromptCallback(string aStr)
{
var v = _theNumber; // This works as expected, the _theNumber is 4
var j = (SomeClass)session["SomeClass"] // I can still access the session..
ctx.Response.Write(aStr); // This does not work, amazingly ctx is now null
//HttpContext.Current.Response.Write(aStr); // This does not work either
}
为什么_theNumber
在回调时仍然可以访问,但是HttpContext到那时是空的?
(我得到的想法是,回调的生命周期可能比HttpContext
的生命周期长,但为什么session
/_theNumber
仍然可访问?)
我读过类似的问题(1,2)/文章(1,2),但我仍然不确定如何解决这个问题
浏览器不支持websockets,因为你正在使用通信从服务器端而不是JavaScript?
你现在可能可以使用HttpContext,因为调用XSockets(在3.0.6版本)总是异步的。
使用XSockets 4.0(目前在预发布版中),你将能够进行同步通信并等待响应。然后将其发送回响应中。在此页面http://xsockets.github.io/XSockets.NET-4.0/搜索"同步返回数据到调用者"有c#和JS的示例。
仍然不理解用例,但我相信你有一个很好的理由,这个向后的东西:)