我目前正在从ASP.net页面调用web服务。我试图调用基于REST的Web服务来请求某个操作,并返回404(这表示我的应用程序的特定错误)。我尝试捕获错误但是当返回404时,我的应用程序继续挂起,我最终收到以下错误。
[System.Net.WebException] = {“基础连接已关闭:接收时发生意外错误。”}
为什么在Web服务以404响应后,我会在2秒内发现不同的错误?
try
{
newPassword = Customer.ResetPassword(_transaction.Centre.Id, newPassword);
}
catch(WebException ex)
{
HttpWebResponse response = (HttpWebResponse)ex.Response;
if ((response != null) && (response.StatusCode == HttpStatusCode.NotFound))
{
//then the email address doesnt exist
ErrorPage(104);
}
else
{
ErrorPage();
}
}
catch (Exception ex)
{
ErrorPage();
}
并称之为:
Request currentRequest = new Request(uri,
Communication.Request.HttpRequestType.POST,[hidden][hidden]);
Response response = currentRequest.Send(Serializer.Serialize<ResetPassword (resetPassword));
return Serializer.Deserialize<ResetPassword>(response.BodyData);
请忽略[hidden]标签。我不得不将其隐藏在公众视野之外。但是,我希望有所帮助。
谢谢大家的帮助!
答案 0 :(得分:2)
由于您提供的系统信息很少:
您可能提前终止您的网络服务电话,例如
HttpContext.Current.Response.End()
Web服务代码(在.NET中)可能正在尝试完成请求,但您已提前关闭了连接。这也发生在Response.Redirect()
,但您从未在网络上看到它,因为您已经完成了对用户的输出。它与您的404无关。网络服务代码抛出WebException
,但没有任何东西可以处理/格式化输出。
<强>更新强>
根据您的反馈,我只能推断您的问题可能是:
您应该下载Fiddler2并将http请求嗅探到您的网络服务,以验证网络上的实际内容。如果一切都结束,那么我只能想到两件事:
Request
/ Response
的某些内容是不对的。您可以使用WebClient
而是拨打UploadData(...)
或UploadString(...)
来将您的数据传输到网络服务。WebException:基础连接已关闭:接收时发生意外错误。只应在客户端希望接收数据时(如标题后的正文)但服务器终止响应时才会发生错误早。