回调时HttpContext为null,XSockets回调

时间:2014-08-05 06:22:41

标签: c# asp.net httpcontext

我正在使用XSockets在ASP.NET网站和某个服务器之间进行通信。当我通过XSockets从服务器收到回调时,我想使用Response()通知ASP.NET网站的前端。

我的主要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仍可访问?)

我已经阅读了类似的问题(12)/文章(12),但我仍然不确定如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

浏览器是否使用支持websockets,因为您使用的是服务器端而不是JavaScript的通信?

您可能现在可以使用HttpContext,因为对XSockets的调用(版本3.0.6)始终是异步的。

使用XSockets 4.0(当前处于预发布状态),您将能够进行同步通信并等待响应。然后将其发送回响应中。搜索此页http://xsockets.github.io/XSockets.NET-4.0/以获取"将数据同步返回给来电者" C#和JS都有样本。

仍然不了解用例,但我确信你有充分的理由做这个落后的事情:)