HttpContext.Current为NULL
2016-04-25 15:47
441 查看
总结:HttpContext.Current是基于System.Runtime.Remoting.Messaging.CallContext这个类,子线程和异步线程都无法访问到主线程在CallContext中保存的数据。所以在异步执行的过程会就会出现HttpContext.Current为null的情况。
详解:
CallContext 是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽。 数据槽不在其他逻辑线程上的调用上下文之间共享。 当 CallContext 沿执行代码路径往返传播并且由该路径中的各个对象检查时,可将对象添加到其中。
当对另一个 AppDomain 中的对象进行远程方法调用时,CallContext 类将生成一个与该远程调用一起传播的 LogicalCallContext 实例。 只有公开ILogicalThreadAffinative 接口并存储在 CallContext 中的对象被在 LogicalCallContext 中传播到 AppDomain 外部。 不支持此接口的对象不在LogicalCallContext 实例中与远程方法调用一起传输。
解决:在异步前面就把HttpContext.Current用HttpContext的方式存起来,然后能过参数的形式传递进去。
1.建立一个属性:
2.建立一个委托:
3.使用的核心代码:
详解:
CallContext 是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽。 数据槽不在其他逻辑线程上的调用上下文之间共享。 当 CallContext 沿执行代码路径往返传播并且由该路径中的各个对象检查时,可将对象添加到其中。
当对另一个 AppDomain 中的对象进行远程方法调用时,CallContext 类将生成一个与该远程调用一起传播的 LogicalCallContext 实例。 只有公开ILogicalThreadAffinative 接口并存储在 CallContext 中的对象被在 LogicalCallContext 中传播到 AppDomain 外部。 不支持此接口的对象不在LogicalCallContext 实例中与远程方法调用一起传输。
解决:在异步前面就把HttpContext.Current用HttpContext的方式存起来,然后能过参数的形式传递进去。
1.建立一个属性:
public HttpContext context { get { return HttpContext.Current; } set { value = context; } }
2.建立一个委托:
public delegate string delegategetResult(HttpContext context);
3.使用的核心代码:
context = HttpContext.Current; delegategetResult dgt = testAsync; IAsyncResult iar = dgt.BeginInvoke(context, null, null); string result = dgt.EndInvoke(iar);
相关文章推荐
- 直播源格式转换教程——rtmp/rtsp/http/m3u8!!
- Android网络编程(二)HttpURLConnection
- OKhttp post请求
- Servlet的四个重要对象
- jboss Slow_HTTP_DOS
- 为什么UDP有时比TCP更有优势
- redhat配置centos网络yum源
- 自动设置IP地址的BAT
- HTTPS
- 判断手机网络状态
- OD破解Crackme1.exe密码
- HTTP协议基本认证
- iOS通过网络请求解析数据_中国省市区街道
- java网络编程之TCP通讯
- httpd-2.2.23安装
- Unable to find optional library: org.apache.http.legacy
- Windows电脑网络常见故障解决方法
- 10032---HttpClient访问,需要用户名密码时
- [bzoj4538][Hnoi2016]网络
- swift网络之json(天气预报)