HttpWebRequest.Timeout是SendTimeout还是ReceiveTimeout?

时间:2013-04-18 15:19:18

标签: .net sockets httpwebrequest

我猜测内部 HttpWebRequest 类是使用System.Net.Sockets.Socket类实现的。

如果是,那么相当于设置其Timeout属性是什么?设置其socket.SendTimeout属性,或者更确切地说是socket.ReceiveTimeout属性?

PS:请不要通过反编译来回答这个问题!

2 个答案:

答案 0 :(得分:0)

使用WCF请求时,在配置请求绑定时设置Send或ReceiveTimout。

根据您正在做的事情(TCP,HTTP / s,管道等),有许多不同的绑定类型,但通常设置超时如下:

Dim xbinding As System.ServiceModel.NetTcpBinding = _
          New System.ServiceModel.NetTcpBinding    

With xbinding
   .SendTimeout = New TimeSpan(0, 10, 0)
   .ReceiveTimeout = New TimeSpan(0, 10, 0) ' ten minutes
   ' you can also set your message limits and such in here. 
End With

显然,你在主机方面做了同样的事情。

答案 1 :(得分:0)

WebRequest.Timeout property documentation中的备注部分说:

  

Timeout属性仅影响使用GetResponse方法发出的同步请求。

这表示您正在接收数据,这意味着设置它类似于设置套接字的ReceiveTimeout属性。

那就是说,后来的一句话说:

  

WebRequest类是一个抽象类。 WebRequest实例在运行时的实际行为由WebRequest.Create方法返回的后代类确定。有关默认值和异常的更多信息,请参阅后代类的文档,例如HttpWebRequest和FileWebRequest。

所以这真的取决于具体的课程。例如,HttpWebRequest.Timeout的行为有些不同。

对于HttpWebRequest,当您调用Timeout时,GetResponse本质上是套接字接收缓冲区超时。但Timeout也适用于GetRequestStream,它没有真正的Socket模拟。请再次注意,这仅适用于同步请求。