Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebOperation超时。为什么以及检查什么?_C#_.net_Http_Httpwebrequest - Fatal编程技术网

C# HttpWebOperation超时。为什么以及检查什么?

C# HttpWebOperation超时。为什么以及检查什么?,c#,.net,http,httpwebrequest,C#,.net,Http,Httpwebrequest,我这样调用web服务(我的web服务): var request = WebRequest.Create(Options.ServerUri + Options.AccountId + "/integration/trip") as HttpWebRequest; request.Timeout = 20000; // 20 seconds should be plenty, no need for 100 seconds request.ContentType = "application/j

我这样调用web服务(我的web服务):

var request = WebRequest.Create(Options.ServerUri + Options.AccountId + "/integration/trip") as HttpWebRequest;
request.Timeout = 20000; // 20 seconds should be plenty, no need for 100 seconds
request.ContentType = "application/json";
request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(Options.LoginName + ":" + Options.Password)));
request.Method = "POST";

var serializedData = (new JavaScriptSerializer()).Serialize(trip);

var bytes = Encoding.UTF8.GetBytes(serializedData);

request.ContentLength = bytes.Length;
var os = request.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();

request.GetResponse();

LoggingAndNotifications.LogAndNotify(string.Format("Success uploading trip: {0}", trip.TripId), false);

return true;
此代码反复调用以发布新对象。大约3次呼叫后,我开始在
regest.GetReponse()上超时


服务器端没有错误,事件日志中没有任何内容。感觉好像“有什么东西”阻止了我重复使用服务。我应该找什么?公司防火墙可以吗?还是我的代码有问题

您应该按照中的示例关闭响应

嗯,文件上还说

此类型的任何公共静态(在Visual Basic中共享)成员都是 线程安全。不保证任何实例成员都是线程 安全的


你可能应该要一把锁

您应该按照中的示例关闭响应

嗯,文件上还说

此类型的任何公共静态(在Visual Basic中共享)成员都是 线程安全。不保证任何实例成员都是线程 安全的


你可能应该要一把锁

我认为问题在于你没有结束回复。尝试按如下方式编辑代码:

var response = request.GetResponse() as HttpWebResponse;
response.Close();

我认为问题在于你没有结束回复。尝试按如下方式编辑代码:

var response = request.GetResponse() as HttpWebResponse;
response.Close();

您确定这不是由服务器端错误引起的吗

这似乎很奇怪,据我所知,.net4上的webrequest是基于底层的IOCP的,也许你可以尝试在每次循环后释放web请求/响应资源

由于GetResponse()将返回一个流,如果不从中读取,实际数据可能不会从服务器端传输到客户端。(我在尝试解析使用peek()的响应时发现了这一点,在调用read()之前,它总是返回无效值。)


因此,请尝试读取或关闭它。

您确定这不是由服务器端错误引起的吗

这似乎很奇怪,据我所知,.net4上的webrequest是基于底层的IOCP的,也许你可以尝试在每次循环后释放web请求/响应资源

由于GetResponse()将返回一个流,如果不从中读取,实际数据可能不会从服务器端传输到客户端。(我在尝试解析使用peek()的响应时发现了这一点,在调用read()之前,它总是返回无效值。)


因此,请尝试读取或关闭它。

那么,前3个请求是否有效,或者它们是否在系统中的某个位置排队?是否响应顺序有误?例如,您的第三个请求获取对第二个请求的响应,第四个请求获取对第三个请求的响应,依此类推。这是在同一线程上运行的同步代码。只需在对象上循环并逐个发布即可-这就是确切的代码。并没有队列,服务器只是停止响应。我想知道代码是否有明显的错误,因为我认为它是服务器。但我预计会出现500个或其他服务器错误。不是超时。那么,前3个请求是否有效,或者它们是否在系统中的某个位置排队?是否响应出现了问题?例如,您的第三个请求获取对第二个请求的响应,第四个请求获取对第三个请求的响应,依此类推。这是在同一线程上运行的同步代码。只需在对象上循环并逐个发布即可-这就是确切的代码。并没有队列,服务器只是停止响应。我想知道代码是否有明显的错误,因为我认为它是服务器。但我预计会出现500个或其他服务器错误。不是timouts。我的问题消失了,但我把它作为一个答案,因为这绝对是一个好主意,关闭响应。奇怪的是,代码检查没有发现it@katit谢谢你。你找到问题消失的原因了吗?没有,因为我没有做任何事情让它消失。这是循环-我得到了错误,然后它开始工作,所有的突然。在此之前,我给网络管理员发了电子邮件,所以可能这需要做些什么:)@katit尽管如此,如果它锁定了你的线程,你可能应该在问题再次出现时实施某种超时。我的问题消失了,但我标记为答案,因为关闭响应绝对是个好主意。奇怪的是,代码检查没有发现it@katit谢谢你。你找到问题消失的原因了吗?没有,因为我没有做任何事情让它消失。这是循环-我得到了错误,然后它开始工作,所有的突然。在那之前,我给网络管理员发了电子邮件,所以也许那得做点什么:)@katit尽管如此,如果它锁定了你的线程,你可能应该在问题再次出现时实施某种超时。我不认为这是服务器。看起来是基础设施(防火墙问题),然后就消失了。我不认为这是服务器。看起来是基础设施(防火墙问题)问题,然后就消失了