热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.NETHTTP请求超时不在连续流网站上"中止"

如何解决《.NETHTTP请求超时不在连续流网站上"中止"》经验,请问有没有懂的朋友?

范围

我为Http Web Request类开发了一个Wrapper ,以更简单的方式执行Get和Posts.这个库已经使用了两年多没有任何问题,但今天,我们遇到了一个奇怪的问题.

有一个网站(加载需要一段时间),显然,它会将字符流保存到HTML前端,因此我们的库"Get"请求会陷入循环.

不同的超时属性

查看Http Web Request参考,我们发现有两种不同的timeout属性.我们正在使用它们,但它们似乎都没有正常中止.

Read Write Timeout - 读取或设置写入或读取流时的超时(以毫秒为单位).

Timeout - 获取或设置GetResponse和GetRequestStream方法的超时值(以毫秒为单位).

统治它们的一次超时

有没有办法设置一个"操作超时",它将在一些预先配置的时间后强制流/连接处理?

一些代码示例

public class Program
{
public static void Main()
{
    string url = "http://anus.io";

    Console.WriteLine("Initializing Request State Object");

    RequestState myRequestState = new RequestState();

    // Creating Http Request
    myRequestState.request  =  (HttpWebRequest)WebRequest.Create(url);
    myRequestState.request.Method           = "GET";
    myRequestState.request.ReadWriteTimeout = 4000;
    myRequestState.request.Timeout          = 4000;

    Console.WriteLine("Begining Async Request");


    IAsyncResult ar = myRequestState.request.BeginGetResponse(new AsyncCallback(ResponseCallback), myRequestState);

    Console.WriteLine("Waiting for Results");
    ar.AsyncWaitHandle.WaitOne();

    myRequestState.respOnse= (HttpWebResponse)myRequestState.request.EndGetResponse(ar);
    Console.WriteLine("Response status code = {0}", myRequestState.response.StatusCode);

}

public static void ResponseCallback (IAsyncResult asyncResult)
{
    Console.WriteLine("Completed");
}
}

这段代码似乎运行正常,但我如何将响应作为字符串读取,因为它经常被传输(如浏览器所示)?

处理这样的网站的正确方法是什么?(通过句柄我的意思是能够识别并跳过服务器根本不会停止传输的情况?)


推荐阅读
author-avatar
dazhi20
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有