【问题标题】:Web service contains additional string tagWeb 服务包含附加字符串标记
【发布时间】:2010-07-09 15:59:51
【问题描述】:

我收到如下 Web 服务响应。它在响应中有额外的 XML 标记和字符串标记。我无法将此响应加载到 Dot Net 中的 XMLDocument 对象中。我已要求网络服务提供商在发送响应之前删除这些标签。但他们说这是网络服务标准。网络服务是如何发送响应的?

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/"><?xml version="1.0" encoding="UTF-8"?><?ACORD version="1.7.0"?>
<ACORD><InsuranceSvcRs></InsuranceSvcRs></ACORD></string>

这是调用网络服务的代码

using (var webClient = new WebClient())
{
    webClient.Credentials = Credentials;
    byte[] responseArray;

    NameValueCollection postValues = GetParameters();
    responseArray = webClient.UploadValues(GetUploadURL(), "POST", postValues);
    responseString = Encoding.ASCII.GetString(responseArray);
}

由于我使用的是 WebClient(不是 Web 服务代理),Web 客户端类是否像这样格式化响应?

编辑:当我尝试使用上面的代码使用示例 HelloWorld Web 服务时,我得到了这样的响应

<?xml version=\"1.0\" encoding=\"utf-8\"?><string xmlns=\"http://tempuri.org/\">Hello World</string>

话虽如此,我正在重新提出我的问题,当客户端代理 POST 到 web 服务时,webservice 假设如何发送响应?

【问题讨论】:

  • 能否请您回复您的请求?
  • 请出示调用服务的代码。没有人可以根据您发布的内容猜测 - 这不是标准。
  • 由于我没有得到具体的答案,我重新表述了我的问题。

标签: .net response web-services


【解决方案1】:

他们说这是网络 服务标准

我可以向您推荐的只是更换服务提供商:-)

如果您不这样做,那么漫长而痛苦的字符串操作正等着您,除非您的服务提供商没有为您提供能够解析此标准的 API。

【讨论】:

  • 由于我使用的是 WebClient(不是 Web 服务代理),Web 客户端类是否像这样格式化响应?
  • WebClient 不会格式化响应。它将 HTTP 请求发送到 Web 服务器。
【解决方案2】:

重复的&lt;?xml version="1.0" encoding="UTF-8"?&gt;

如果服务给你这个答案,他们有一个错误。

  1. 如果可以,请使用其他服务。
  2. 如果不能,您始终可以将其从 XML 中删除,然后再进行处理。

【讨论】:

  • 这不是错误:可能不是像每个普通人那样构建 XML,而是将 &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;?ACORD [...] ACORD&gt; 与其他两个字符串连接起来。
【解决方案3】:

大家好,感谢您的所有回复。由于我使用 WebClient 类发布到他们的网络服务,响应内容确实包含“字符串”标签。但如果我使用 Web 服务代理,.net 会为我们提取内容并删除字符串标签。所以响应是网络服务标准。当我使用示例服务进行测试时,我得到了这样的响应

&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;string xmlns=\"http://tempuri.org/\"&gt;Hello World&lt;/string&gt;

【讨论】:

  • 你错了。 .NET 不做任何这样的事情。如果您使用代理,那么您使用的是 SOAP,因此您会得到一个 SOAP 响应。如果你只是 POST,它只是 XML。
  • 是的,你是对的,约翰。谢谢你清楚的解释。我已经为 HelloWorld Web 服务提供了上述 SOAP 响应。
  • 当我发布时,服务是否假设返回这样的响应 "\r\ntempuri.org\">Hello World "?
【解决方案4】:

是的,你是正确的约翰桑德斯。正如我在之前的回答中所说,.Net 什么也不做。当我发布与使用代理时,响应本身不同。

当我使用代理时,我得到了像 Soap<HttpResponse> <StatusCode>OK</StatusCode> <StatusDescription>OK</StatusDescription> <WebHeaders> <Content-Length>363</Content-Length> <Cache-Control>private, max-age=0</Cache-Control> <Content-Type>text/xml; charset=utf-8</Content-Type> <Date>Mon, 12 Jul 2010 20:01:17 GMT</Date> <Server>Microsoft-IIS/6.0</Server> <X-AspNet-Version>2.0.50727</X-AspNet-Version> <X-Powered-By>ASP.NET</X-Powered-By> </WebHeaders> </HttpResponse> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"></s:Header> <soap:Body> <HelloWorldResponse xmlns="http://tempuri.org/"> <HelloWorldResult>Hello World</HelloWorldResult> </HelloWorldResponse> </soap:Body> </soap:Envelope> 这样的响应

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多