添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在一个项目中,为了系统执行效率更快,把一个经常用到的数据库表通过dataset放到Application中,发现在异步实现中每一次都会出现HttpContext.Current为null的异常,后来在网上查了好多资料,发现问这个问题的人多,回答的少,回答的也多数都是:引用System.Web,不要用HttpContext.Current.Application应该用System.Web.HttpContext.Current.Application,后来在网上看到一篇关于System.Runtime.Remoting.Messaging.CallContext这个类的详细介绍才知道,原来HttpContext.Current是基于System.Runtime.Remoting.Messaging.CallContext这个类,子线程和异步线程都无法访问到主线程在CallContext中保存的数据。所以在异步执行的过程会就会出现HttpContext.Current为null的情况,为了解决子线程能够得到主线程的HttpContext.Current数据,需要在异步前面就把HttpContext.Current用HttpContext的方式存起来,然后能过参数的形式传递进去,下面看看实现的方法:

public HttpContext context
{
get { return HttpContext.Current; }
set { context = value ; }
}
然后建立一个委托
public delegate string delegategetResult(HttpContext context);

下面就是实现过程的编码

在一个项目中,为了系统执行效率更快,把一个经常用到的数据库表通过dataset放到Application中,发现在异步实现中每一次都会出现HttpContext.Current为null的异常,后来在网上查了好多资料,发现问这个问题的人多,回答的少,回答的也多数都是:引用System.Web,不要用HttpContext.Current.Application应该用System.Web.HttpContext.Current.Application,后来在网上看到一篇关于System.Runtime.Remoting.Messaging.CallContext这个类的详细介绍才知道,原来HttpContext.Current是基于System.Runtime.Remoting.Messaging.CallContext这个类,子线程和异步线程都无法访问到主线程在CallContext中保存的数据。所以在异步执行的过程会就会出现HttpContext.Current为null的情况,为了解决子线程能够得到主线程的HttpContext.Current数据,需要在异步前面就把HttpContext.Current用HttpContext的方式存起来,然后能过参数的形式传递进去,下面看看实现的方法:

public HttpContext context
{
get { return HttpContext.Current; }
set { context = value ; }
}
然后建立一个委托
public delegate string delegategetResult(HttpContext context);

下面就是实现过程的编码

protected void Page_Load(object sender, EventArgs e)
{
context = HttpContext.Current;
delegategetResult dgt = testAsync;
IAsyncResult iar = dgt.BeginInvoke(context, null, null);
string result = dgt.EndInvoke(iar);
Response.Write(result);
}
public static string testAsync(HttpContext context)
{
if (context.Application["boolTTS"] == null)
{
Hashtable ht = (Hashtable)context.Application["TTS"];
if (ht == null)
{
ht = new Hashtable();
}
if (ht["A"] == null)
{
ht.Add("A", "A");
}
if (ht["B"] == null)
{
ht.Add("B", "B");
}
context.Application["TTS"] = ht;
}
Hashtable hts = new Hashtable();
hts = (Hashtable)context.Application["TTS"];
if (hts["A"] != null)
{
return "恭喜,中大奖呀";
}
else
{
return "我猜你快中奖了";
}
}
在一个项目中,为了系统执行效率更快,把一个经常用到的数据库表通过dataset放到Application中,发现在异步实现中每一次都会出现HttpContext.Current为null的异常,后来在网上查了好多资料,发现问这个问题的人多,回答的少,回答的也多数都是:引用System.Web,不要用HttpContext.Current.Application应该用System.Web.HttpC
回答的也多数都是:引用System.Web,不要用 Http Context . Current . Application 应该用System.Web. Http Context . Current . Application ,后来在网上看到一篇关于System.Runtime.Remoting.Messaging.Call Context 这个类的详细介绍才知道,原来 Http Context . Current 是基于System.Runtime.Remoting.Messaging.Call Context 这个类,子线程和 异步 线程都无法访问到主线程在Call Context 中保存的数据。所以在 异步 执行的过程会就会出现 Http Co
PM > Install-Package AspNetCore Current Request Context 首先,您必须在Startup类中的Configure 方法 I Application Builder Current Request Context Middleware添加到I Application Builder 。 您可以使用扩展 方法 Use Current Request Context 实现 。 public class Startup public void Configure ( I Application Builder app ) // add Current Req
本文参考了 http ://stephenwalther.com/blog/的内容。今天需要对ASP.NETMVC的Controller进行测试,我们都知道当我们在测试工程里new一个controller时,这个controller里的 http context 是空的,也就是 session ,cookie,form等都是空。 方法 一:Mockcontroller的 Http Context ,暂时失败那么我们如何对controller进行测试呢,我首先想到的是mock一个 http context ,这里我用的是RhinoMockspublicstaticclassMvcMockHelpers   {       p
今天在手机App测试接口的时候发现一个通过POST方式的接口 获取body中的参数一直为空,但是在数据量小的时候却可以获取到数据,开始怀疑是不是POST的长度有限制,然后在web.config中修改了一下maxRequestLength,如下 <system.web> < http Runtime targetFramework="4.5" maxRequestLen...
var mock Context = new Mock<Controller Context >(); mock Context .Setup(c => c. Http Context .Response.Redirect(" http ://www.baidu.com")); var controller=new HomeController(); controller.Controller Context = mock Context .Object; controller.Relocation(); mock Context .Verify(); Http Context . Current .Request.InputStream 找了一下发现有 Request.Body 然后就替换了 后来又发现Request.Body 取不到数据将代码移到ActionFilter,读取到的Body数据依然为空。最后将代码移到Middleware中,读取到的Body数据还是空。 问题 解决 网上搜了一圈发现.net Core缓存 Http 请求的Body数据 只能读取一次 Application _Start 网站启动时候触发,只执行一次 Application _End 网站关闭时候触发,只执行一次 Session _Start 创建 session 时候触发 Session _End 销毁 session 时候触发 Application _Error IIS请求流程 Http 请求到达IIS服务器后, Http RunTime作为入口, Http RunTime类的ProcessRequest 方法 Http RunTime包含着所有的 Http 请求信息(ProcessRequest 方法 Http WorkRequest参数)。 IIS服务器依赖 HTTP .SYS驱动监听 Http 请求。IIS在操作系统启动时候再 HTTP .SYS中注册自己的虚拟路径(URL访问返回404在这一步执行确定) URL通过验证, HTTP .SYS交给IIS的w3wp.exe执行。然后IIS接收返回的数据流,返还给 Http .sys,最后由 HTTP .SYS 返回浏览器。 Http 请求的处理过程是通过管道(托管模块Module和处理程序Handlers组成) 创建 Http WorkRequest对象,包含所有的 HTTP 请求信息 Http WorkRequest将请求传递给 Http RunTime的ProcessRequest 方法 Http RunTime创建 Http Context 对象,并且用 Http WorkRequest进行初始化。 Http RunTime调用 Http Application Factory的Get Application Instance 方法 创建 Http Application Http Application 继承自I Http Handler,应用程序对象池中是否存 在 Http Application ,存在返回不存在New返回)