none
WebForm中用HttpWebRequest访问另一页面的诡异问题 RRS feed

  • 问题

  • 最近在项目中遇到的一个问题,有两个页面A.aspx与B.aspx,现在想在A页面用HttpWebRequest去获取B页面(用来发邮件,作为邮件正文用的),普通情况下获取很正常,代码如下

    HttpWebRequest WRequest = (HttpWebRequest)HttpWebRequest.Create("http://192.168.0.18/b.aspx");
    HttpWebResponse WResponse = (HttpWebResponse)WRequest.GetResponse();
    using (StreamReader srd = new StreamReader(WResponse.GetResponseStream()))
    {
      //处理结果
    }
    WResponse.Close();
    

     但是这样在B页面无法与A页面共享Session,于是我将Cookie也一起传过去,代码如下

    HttpWebRequest WRequest = (HttpWebRequest)HttpWebRequest.Create("http://192.168.0.18/b.aspx");
    WRequest.CookieContainer = new CookieContainer();
    HttpCookie oCookie = Request.Cookies["ASP.NET_SessionId"];
    Cookie oC = new Cookie();  
    oC.Domain = WRequest.RequestUri.Host; 
    oC.Name = oCookie.Name; 
    oC.Value = oCookie.Value;
    WRequest.CookieContainer.Add(oC);
    HttpWebResponse WResponse = (HttpWebResponse)WRequest.GetResponse();
    using (StreamReader srd = new StreamReader(WResponse.GetResponseStream()))
    {
      //处理结果
    }
    WResponse.Close();

    问题来了,虽然也能得到正确的结果,Session也能取到了,但是要等待很久,约1分钟。

    经过测试,发现如果在Webform中将ASP.NET_SessionId这个Cookie值一起传过去,并且访问的是同网站下的另一页面,就会很卡,约1分钟才能有响应;不传这个Cookie或者传别的Cookie,或者访问另外网站或者用Winform访问,都不卡,很快就得到结果了。

    好诡异的问题。。。。。

    2011年3月25日 1:07

答案