0

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

如果是,那么设置其Timeout属性的等价物是什么?设置它的socket.SendTimeout属性,或者更确切地说是socket.ReceiveTimeout属性?

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

4

2 回答 2

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

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

于 2013-04-18T15:56:22.287 回答
0

WebRequest.Timeout 属性文档中的备注部分说:

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

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

也就是说,后来的评论指出:

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

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

在这种情况下HttpWebRequestTimeout调用时,本质上是一个套接字接收缓冲区超时GetResponse。但Timeout也适用于GetRequestStream,它没有真正的 Socket 类似物。再次注意,这仅适用于同步请求。

于 2013-04-18T17:01:55.117 回答