0

我目前正在从 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);

请忽略 [隐藏] 标签。我不得不从公众视野中隐藏它。但是,我希望这会有所帮助。

谢谢大家的帮助!

4

1 回答 1

2

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

可能会提前终止您的 Web 服务调用,例如

HttpContext.Current.Response.End()

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


更新

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

  1. 在发送到网络服务的数据中
  2. 网络服务如何处理数据

您应该下载Fiddler2并嗅探到您的 Web 服务的 http 请求,以验证实际通过网络传输的内容。如果一切顺利,那么我只能想到两件事:

  1. Request关于你的/的某些事情Response是不正确的。您可以使用一个WebClient代替并调用UploadData(...)UploadString(...)将您的数据传输到网络服务。
  2. Web 服务出现问题,导致它在以客户期望的方式终止响应之前关闭连接。

WebException:底层连接已关闭:接收时发生意外错误。仅当客户端期望接收数据(如标头后的正文)但服务器提前终止响应时才应发生。

于 2011-08-04T15:54:08.597 回答