我猜内部HttpWebRequest类是使用System.Net.Sockets.Socket
类实现的。
如果是,那么设置其Timeout
属性的等价物是什么?设置它的socket.SendTimeout属性,或者更确切地说是socket.ReceiveTimeout属性?
PS:请不要通过反编译代码来回答这个问题!
我猜内部HttpWebRequest类是使用System.Net.Sockets.Socket
类实现的。
如果是,那么设置其Timeout
属性的等价物是什么?设置它的socket.SendTimeout属性,或者更确切地说是socket.ReceiveTimeout属性?
PS:请不要通过反编译代码来回答这个问题!
对于 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
显然,您在主机方面做了同样的事情。
WebRequest.Timeout 属性文档中的备注部分说:
Timeout 属性仅影响使用 GetResponse 方法发出的同步请求。
这表明您正在接收数据,这意味着设置它类似于设置套接字的ReceiveTimeout
属性。
也就是说,后来的评论指出:
WebRequest 类是一个抽象类。WebRequest 实例在运行时的实际行为由 WebRequest.Create 方法返回的后代类确定。有关默认值和异常的更多信息,请参阅后代类的文档,例如 HttpWebRequest 和 FileWebRequest。
所以它真的取决于具体的类。例如, HttpWebRequest.Timeout的行为有些不同。
在这种情况下HttpWebRequest
,Timeout
调用时,本质上是一个套接字接收缓冲区超时GetResponse
。但Timeout
也适用于GetRequestStream
,它没有真正的 Socket 类似物。再次注意,这仅适用于同步请求。