29

我正在使用 C# 并通过自动生成的 C# 代理对象连接到 WebService。我调用的方法可能会运行很长时间,有时会超时。我得到不同的错误,有时我得到 aSystem.Net.WebException或 a System.Web.Services.Protocols.SoapException。这些异常具有我可以查询的属性,以查找特定类型的错误,我可以从中向用户显示对人类友好的版本。

但有时我只是得到一个InvalidOperationException,它有以下消息。有什么方法可以解释这是什么,而无需通过字符串挖掘我认识的东西,感觉很脏,并且与国际化无关,错误消息可能会以不同的语言返回。

Client found response content type of 'text/html; charset=utf-8', but expected 'text/xml'.
The request failed with the error message:
--
<html>
    <head>
    <title>Request timed out.</title>
                        <style>
         body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
         p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
         b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
         H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
         H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
         pre {font-family:"Lucida Console";font-size: .9em}
         .marker {font-weight: bold; color: black;text-decoration: none;}
         .version {color: gray;}
         .error {margin-bottom: 10px;}
         .expandable { text-decoration:underline; font-weight:bold;     color:navy;         cursor:hand; }
        </style>
    </head>

    <body bgcolor="white">

            <span><H1>Server Error in '/PerformanceManager' Application.<hr     width=100% size=1 color=silver></H1>

            <h2> <i>Request timed out.</i> </h2></span>

            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

            <b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

            <br><br>

            <b> Exception Details: </b>System.Web.HttpException: Request timed out.<br><br>

            <b>Source Error:</b> <br><br>

            <table width=100% bgcolor="#ffffcc">
               <tr>
                  <td>
                      <code>

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.</code>

                  </td>
               </tr>
            </table>

            <br>

            <b>Stack Trace:</b> <br><br>

            <table width=100% bgcolor="#ffffcc">
                   <tr>
                  <td>
                      <code><pre>

[HttpException (0x80004005): Request timed out.]
</pre></code>

                  </td>
               </tr>
            </table>

            <br>

            <hr width=100% size=1 color=silver>

            <b>Version Information:</b> Microsoft .NET Framework Version:2.0.50727.312; ASP.NET Version:2.0.50727.833

            </font>

    </body>
</html>
<!-- 
[HttpException]: Request timed out.
-->
--.

编辑:我对网络服务器上的方法进行了尝试。我已经调试过了,web-server 方法返回(大约一分钟后)没有任何异常。我还在 Web 服务中添加了一个未处理的异常处理程序,并且没有命中断点。Web 服务返回后,我会在客户端收到此错误,而不是我预期的结果。

4

9 回答 9

45

发生这种情况是因为您的 Web 服务中存在未处理的异常,并且 .NET 运行时正在吐出其 HTML 黄屏死机服务器错误/异常转储页面,而不是 XML。

由于您的 Web 服务的使用者期望的是 text/xml 标头,但得到的是 text/html,因此它会引发该错误。

您应该解决超时的原因(也许是一个冗长的 SQL 查询?)。

此外,请查看 Jeff Atwood 博客上的这篇博客文章,该文章解释了实现全局未处理异常处理程序和使用 SOAP 异常。

于 2008-09-22T16:44:54.257 回答
11

这意味着您的消费者期望来自 Web 服务的 XML,但正如您的错误所示,Web 服务返回 HTML,因为它由于超时而失败。

因此,您需要与远程 Web 服务提供商交谈,让他们知道它正在失败并采取纠正措施。除非您是 Web 服务的提供者,在这种情况下,您应该捕获异常并返回 XML,告诉消费者发生了哪个错误(“远程提供者”也应该这样做)。

于 2008-09-22T15:03:20.180 回答
5

If you are using .NET version 4.0. the validateRequestion is turned on by default for all the pages. in previous versions 1.1 and 2.0 it was only for aspx page. You can turn the default validation off. In that case you have to do the due diligence and make sure that the data is clean. Use HtmlEncode. Do the following to turn the validation off

In the web.config add the following lines for system.web

 <httpRuntime requestValidationMode="2.0" />

and

 <pages validateRequest="false" />

You can read more about this http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes also http://msdn.microsoft.com/en-us/library/ff649310.aspx

Hope this helps.

于 2011-06-01T21:00:01.460 回答
4

网络服务器返回一个 http 500 错误代码。这些错误通常发生在网络服务器上抛出异常并且没有逻辑捕获它因此它会吐出 http 500 错误时。您通常可以通过在代码中放置 try-catch 块来解决问题。

于 2008-09-22T16:53:53.550 回答
4

由于 web.config 中的配置错误,我发生了这种情况。检查连接字符串等可能是超时的答案。

于 2012-06-20T11:20:15.617 回答
3

删除 web.config 文件并重新插入。http://forums.asp.net/post/916808.aspx

于 2015-06-12T10:47:51.610 回答
1

您的网络服务是否在 IIS 中正确配置?其使用的池,ASP.NET(2.0)的版本设置?你能浏览.asmx 吗?

谈到异常,请尝试在访问您的 Web 服务的行中放置一个 try-catch 块。放置并捕获(System.Web.Services.Protocolos.SoapException)。

此外,您可以为 Web 服务对象设置超时。

于 2009-08-04T14:52:30.673 回答
1

更改 Web 服务返回类型和SoapDocumentMethod后出现此错误。

最初是:

[WebMethod]
public int Foo()
{
    return 0;
}

我决定让它着火并忘记这样的类型:

[SoapDocumentMethod(OneWay = true)]
[WebMethod]
public void Foo()
{
    return;
}

在这种情况下,更新网络参考会有所帮助。

要更新 Web 服务引用:

  • 展开解决方案资源管理器
  • 查找Web 引用- 只有在您的项目中添加了 Web 服务引用时才会显示此内容
  • 右键单击并单击更新网络参考
于 2015-11-24T12:03:55.183 回答
0

我遇到的问题与 SOAP 版本有关。该asmx服务被配置为接受 1.1 和 1.2 这两个版本,因此,我认为当您使用该服务时,客户端或服务器不知道解析哪个版本。

要解决这个问题,有必要添加:

using (wsWebService yourService = new wsWebService())
{
    yourService.Url = "https://myUrlService.com/wsWebService.asmx?op=someOption";
    yourService.UseDefaultCredentials = true; // this line depends on your authentication type
    yourService.SoapVersion = SoapProtocolVersion.Soap11; // asign the version of SOAP
    var result = yourService.SomeMethod("Parameter");
}

wsWebService作为参考生成的类的名称在哪里。

于 2018-08-15T20:51:57.960 回答