在回调时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),但我仍然不确定如何解决这个问题

在回调时HttpContext为空,XSockets回调

浏览器不支持websockets,因为你正在使用通信从服务器端而不是JavaScript?

你现在可能可以使用HttpContext,因为调用XSockets(在3.0.6版本)总是异步的。

使用XSockets 4.0(目前在预发布版中),你将能够进行同步通信并等待响应。然后将其发送回响应中。在此页面http://xsockets.github.io/XSockets.NET-4.0/搜索"同步返回数据到调用者"有c#和JS的示例。

仍然不理解用例,但我相信你有一个很好的理由,这个向后的东西:)