WebException:底层连接已关闭

时间:2011-08-04 15:11:49

标签: c# asp.net timeout http-status-code-404 system.net.webexception

我目前正在从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]标签。我不得不将其隐藏在公众视野之外。但是,我希望有所帮助。

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:2)

由于您提供的系统信息很少:

可能提前终止您的网络服务电话,例如

HttpContext.Current.Response.End()

Web服务代码(在.NET中)可能正在尝试完成请求,但您已提前关闭了连接。这也发生在Response.Redirect(),但您从未在网络上看到它,因为您已经完成了对用户的输出。它与您的404无关。网络服务代码抛出WebException,但没有任何东西可以处理/格式化输出。


<强>更新

根据您的反馈,我只能推断您的问题可能是:

  1. 在发送到网络服务的数据
  2. 关于webservice如何处理数据
  3. 您应该下载Fiddler2并将http请求嗅探到您的网络服务,以验证网络上的实际内容。如果一切都结束,那么我只能想到两件事:

    1. 关于Request / Response的某些内容是不对的。您可以使用WebClient而是拨打UploadData(...)UploadString(...)来将您的数据传输到网络服务。
    2. Web服务中出现问题导致它在按照客户期望的方式终止响应之前关闭连接。
    3. WebException:基础连接已关闭:接收时发生意外错误。只应在客户端希望接收数据时(如标题后的正文)但服务器终止响应时才会发生错误早。