我遇到了一个奇怪的问题,甚至是WebRequest的行为。首先,这就是我要做的事情:
Dim req As HttpWebRequest = CType(Net.WebRequest.Create("https://cloud.myweb.de/myenginge/dostuff"), HttpWebRequest)
Dim inputString As String = "text=DoStuff"
Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(inputString)
req.Method = "POST"
req.Accept = "application/xml;q=0.9,*/*;q=0.8"
req.ContentType = "application/x-www-form-urlencoded"
req.ContentLength = data.Length
str2 = req.GetRequestStream()
str2.Write(data, 0, data.Length)
str2.Close()
Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
str = resp.GetResponseStream()
buffer = New IO.StreamReader(str, System.Text.Encoding.ASCII).ReadToEnd
但是在我的编译设置中设置.NET Frame 3.5会导致超时:
str2 = req.GetRequestStream()
虽然设置框架版本4.0工作,一切都通过没有任何超时问题。有人知道为什么会这样吗?我也试过3.0,它也没用。
(我在这个例子中使用VB.NET,但也欢迎使用C#解决方案。)
答案 0 :(得分:2)
我的猜测是你还有其他要求尚未处理的请求。更新您的代码以使用适用的using
语句(在处理实现IDisposable
的任何对象时应始终使用此语句),例如。
using (var stream = req.GetRequestStream())
{
...
}
这将确保所有流在移动到下一个之前可靠地关闭。
<强>更新强>
这绝对不是切换.NET Framework的问题,我将您的代码沙盒化为一个小型控制台应用程序并重新编写代码如下(显然将您的URL换成另一个):
Dim request = CType(WebRequest.Create("https://cloud.myweb.de/myenginge/dostuff"), HttpWebRequest)
Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes("text=DoStuff")
request.Method = WebRequestMethods.Http.Post
request.Accept = "application/xml;q=0.9,*/*;q=0.8"
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = data.Length
Using inputStream = request.GetRequestStream()
inputStream.Write(data, 0, data.Length)
End Using
Dim response = CType(request.GetResponse(), HttpWebResponse)
Dim buffer As String = ""
Using outputStream = response.GetResponseStream()
Using streamReader = New StreamReader(outputStream, System.Text.Encoding.ASCII)
buffer = streamReader.ReadToEnd()
End Using
End Using
Console.WriteLine(buffer)
我每次都得到了成功的回复。我在.NET 4.0和.NET下运行相同的代码。 3.5。以下是每个请求看起来如何礼貌Fiddler:
POST someurl HTTP / 1.1
接受:application / xml; q = 0.9, / ; q = 0.8
内容类型:application / x-www-form-urlencoded
主持人:someurl
内容长度:12
期待:100-continue
连接:Keep-Alive
文本= DoStuff
答案 1 :(得分:0)
我会使用ILSpy比较你的exe文件的IL代码 也许在这个级别上进行检查可以让您了解版本之间的不同之处。