首页 联系我 返回顶部
在今天做的小项目中
用户登录成功后要访问另一个应用的一个url,只是get过去。
首先想到用HttpWebRequest去直接GetResponse()就OK了
但这里会有一个问题:如果另一个应用的响应时间过慢或网络响应过慢,直接会导致登录时会卡一下。
可以完全使用HttpWebRequest的异步方法获取响应
class HttpAsynGet
    {
        public HttpAsynGet(string url)
        {
            this.Url = url;
            request = (HttpWebRequest)WebRequest.Create(Url);
        }
        public string Url
        {
            get;
            set;
        }
        private HttpWebRequest request;
        public HttpWebRequest Request
        {
            get
            {
                return request;
            }
        }
        public void DO()
        {
            request.BeginGetResponse(ProcessResponse, this);
        }
        private void ProcessResponse(IAsyncResult ar)
        {
            HttpAsynGet item = (HttpAsynGet)ar.AsyncState;
            using (HttpWebResponse response = (HttpWebResponse)item.request.EndGetResponse(ar))
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    Console.WriteLine(response.ContentLength);
                    Console.WriteLine(new string('=', 20));
                }
                else
                {
                    Console.WriteLine(response.StatusDescription);
                }
                this.request.Abort();
            }
        }
    }

调用:
HttpAsynGet get = new HttpAsynGet("xxxxxx");
get.DO();
即可。
在.Net FrameWork的一些类中,只要有以Begin..../End....开头的方法说明该类的这些方法支持异步操作。

相关文章

7 Responses

收起评论
  1. aw 九月 27 2008 , 15:04 #1
    aw
    幻想曲,又名臭蛋. .............
  2. aw 九月 28 2008 , 10:31 #2
    aw
    妈的,你不更新博客了?
  3. 幻想曲 九月 28 2008 , 13:08 #3
    幻想曲
    -_-
  4. omeweb 十月 6 2008 , 13:35 #4
    omeweb
    这个地方应用这个不错,可是,如果请求的页面的内容要在页面上显示的话,那要怎么做呢?恐怕就有问题了吧?
    如果是同步,另一台服务器慢或者网络延迟,那显示的就慢,
    如果是异步,怎么立即显示出来呢?在Page_Load里 Sleep个几秒吗?
  5. omeweb 十月 6 2008 , 13:36 #5
    omeweb
    我用你的rss reader就出了这个问题,要在页面上立即显示出来,可就是不显示
  6. omeweb 十月 6 2008 , 13:38 #6
    omeweb
    提交一个小bug,我提交评论后,我的评论上去了,可下面显示 #0,表明是第一个,可一刷新就正常了,貌似你没用js变量保存已经有的评论数目?
  7. 幻想曲 十月 8 2008 , 15:54 #7
    幻想曲
    要立即显示的话,可以Sleep几秒
    但这会导致整个页面都会被Sleep
    这种情况的话可以采用Ajax了
    或后台用ICallbackEvent

Write a comment:



(将显示你的Gravatar图标)  



[b][/b] - [i][/i] - [u][/u]- [quote][/quote]

:-/ ^_^ :d :o :kiss: :) :p :se: [yeah] :( :love: :han: :up: :cry: :zzz: o_o

暂时停止交换链接.

评论提交有问题?