C# API 方法调用抛出异常

发布于 2024-10-20 19:52:32 字数 2491 浏览 1 评论 0原文

我正在编写一个 Windows 窗体应用程序,它使用 API(准确地说是 smartFOCUS API)来编写简单的报告并将其写入文件。

我已经使用我编写的另一个简单的 Windows 窗体应用程序完成了大约一百次,并且调用工作正常,但是当我使用我正在处理的应用程序尝试它时,它在调用时返回此异常:

System.InvalidOperationException was unhandled.
Message = Client found response content type of 'text/html', but expected 'text/xml'

任何想法可能导致此异常?这真的让我很困惑。

如果您想要更多代码或异常详细信息或任何信息,请告诉我。

这是调用该方法的代码:

        soap.GetEvents2(logOn.Username,
                        logOn.Password,
                        logOn.BoothKey,
                        flag,
                        ref eventFields,
                        this.EventCode,
                        accountKey,
                        emailKey,
                        packageKey,
                        replyMapKey,
                        this.BatchKey,
                        this.StartDate,
                        this.EndDate,
                        maxRows,
                        ref results);

提前致谢!

编辑:

这是响应 HTML:

The request failed with the error message:
--
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>500 - Internal server error.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
 </fieldset></div>
</div>
</body>
</html>

抱歉,内容很混乱。

I'm writing a Windows Form app that uses an API (the smartFOCUS API, to be precise) to write simple reports and write them to a file.

I've done this about a hundred times using another simple Windows Form app I wrote, and the calls works fine, but when I try it with the app I'm working on, it returns this exception on the call:

System.InvalidOperationException was unhandled.
Message = Client found response content type of 'text/html', but expected 'text/xml'

Any idea on what could be causing this exception? It's really confusing me.

If you'd like any more code or exception details or anything let me know.

Here's the code that calls the method:

        soap.GetEvents2(logOn.Username,
                        logOn.Password,
                        logOn.BoothKey,
                        flag,
                        ref eventFields,
                        this.EventCode,
                        accountKey,
                        emailKey,
                        packageKey,
                        replyMapKey,
                        this.BatchKey,
                        this.StartDate,
                        this.EndDate,
                        maxRows,
                        ref results);

Thanks in advance!

EDIT:

Here's the reponse HTML:

The request failed with the error message:
--
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>500 - Internal server error.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
 </fieldset></div>
</div>
</body>
</html>

Sorry for the messiness of that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

忱杏 2024-10-27 19:52:32

您的 Web 服务器正在返回 SOAP 响应,其中 Content-Type 标头设置为 text/html,而库需要内容类型 text/xml。因此,您需要更改 Web 服务器的配置,以将页面作为 XML 提供服务。

如果服务器使用 ASP.NET,则常见原因是 Web 服务遇到错误。错误详细信息以 HTML 格式的页面形式写入客户端,而不是 SOAP XML 响应。如果您可以检查 Web 服务的原始输出,那么您应该能够看到一条错误消息,从而找到解决方案。

编辑

从您提供的 HTML 来看,这确实看起来像一个通用错误页面。看来服务器已配置为隐藏错误详细信息。在 ASP.NET 中,您可以通过将以下内容添加到 Web 服务的 web.config 来启用此功能:

<configuration>
  <system.web>
      <customErrors mode="Off">
  </system.web>
</configuration>

如果您不控制 Web 服务,那么您可能必须从 API 提供者那里获得帮助 - 也许您的输入参数之一是错误的?

Your web server is returning the SOAP response with the Content-Type header set to text/html, while the library requires content type text/xml. So you need to change the configuration of your web server to serve the page as XML.

If the server is using ASP.NET, then a common cause of this would be because the web service encountered an error. The error details are written as an HTML formatted page to the client, rather than a SOAP XML response. If you can examine the raw output from the web service then you should be able to see an error message that will lead you to a solution.

EDIT

From the HTML you provided, this does indeed look like a generic error page. It looks the server is configured to hide the error details. In ASP.NET you can enable this by adding the following to the web service's web.config:

<configuration>
  <system.web>
      <customErrors mode="Off">
  </system.web>
</configuration>

If you don't control the web service then you might have to get help from the API provider - perhaps one of your input parameters is bad?

幸福丶如此 2024-10-27 19:52:32

可以看看回复吗?收到 html 而不是 xml 通常表明您对不正确的 URL 进行了 Web 请求并收到了 404 错误或类似错误。

Can you look into response? Receiving html instead of xml is usually a sign thay you did web-request to incorrect URL and received 404 error or something similar.

和影子一齐双人舞 2024-10-27 19:52:32

嗯,问题出在服务器端。 smartFocus API 是否可以使用任何类型的错误日志记录?这是云服务还是您在某处托管的服务?

Well, the problem is happening on the server side. Is there any kind of error logging available for the smartFocus API? Is this a cloud service or is this a service that you host someplace?

逐鹿 2024-10-27 19:52:32

在不了解您正在使用的 smartFOCUS api 的情况下...

看来您所点击的任何端点都以错误的内容类型进行响应。如异常所示,调用期望内容类型为 text/xml 的结果,但得到的是 text/html (可能是有效的肥皂消息,但内容类型未明确设置为 xml)。

我建议启动 soapUI 或其他某种形式的调试/直接与服务端点交互,并查看响应是否是有效的,如果您不控制发送不适当内容类型的响应的端点,您可能需要联系控制者并查看他们是否可以解决该问题。

编辑 - 对OP问题中的附加信息的回复。

鉴于发布的响应,该调用似乎无效,这可能是由于多种原因造成的;传递的参数不正确且在服务器上未正确处理、引用的端点完全无效或真正的服务器问题超出了您的范围。如果您将正确的参数传递到正确的端点,那么我肯定建议联系端点的所有者来解决问题。如果您不确定,我还建议再次尝试通过 soapUI 或其他一些端点交互工具。

Without knowing much about the smartFOCUS api you are using...

It appears that whatever endpoint you are hitting is responding with the wrong content type. As indicated by the exception the call is expecting a result with a content type of text/xml but is getting text/html (might be a valid soap message but the content type isn't set to xml explicitly).

I would recommend spinning up soapUI or some other form of debugging/interacting with the service endpoint directly and seeing if the responses are valid, if you don't control the endpoint that is sending the inappropriate content type for the response you may want to contact whoever is in control and see if they can remedy the issue.

EDIT - Response to additional info in OP question.

Given the response posted it appears that the call is invalid, this could be due to a number of reasons; Incorrect parameters being passed and not handled correctly on the server, a completely invalid endpoint being referenced or genuine server problems out of your scope. If you are passing correct parameters to the correct endpoint then I would definitely suggest contacting the owner of the endpoint to get the situation resolved.. if you aren't sure I would also recommend again to try and debug the calls via soapUI or some other endpoint interaction tool.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文