当前位置: 首页 > 知识库问答 >
问题:

作为“text/plain”接收的Web服务XML响应。(还有另一个内容类型错误。)

鲜于谦
2023-03-14

我试图开发一个web应用程序,使用WCF向web服务提交一个简单的登录请求,但我不断得到“响应消息的内容类型text/plain不匹配”的错误,尽管web服务似乎返回了有效的XML。

我已经回顾了几十个类似的S.O.关于这一错误的帖子,并排除了更常见的可能性:

  1. 在响应中可以看到,返回的不是错误页(如本文所述)。
  2. 我似乎没有一个绑定的不匹配问题(如在这里讨论的)。我的应用程序和web服务都使用SOAP1.1,并且指定了“BasichttpBinding”。
  3. 错误消息中包含的响应显示有效的XML,其中包括我所需的用户和响应变量。
  4. 我可以在Web服务日志文件中看到登录方法正在完全执行,没有引发异常。
  5. 我将XML响应粘贴到W3Schools验证器中,没有出错。
AuthenticationServiceClient client = new AuthenticationServiceClient(strPortName, strURL);
client.Open();
UserCredentials credentials = new UserCredentials();
credentials.userName = TestUsername;
credentials.password = TestPassword;
LoginResponse response = client.login(credentials); // Using WCF.

下面是web.config中的绑定:

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding name="AuthenticationServiceSoapBinding" />
    </basicHttpBinding>
  </bindings>
  <client>
    <endpoint address="http://mywebserviceurl"
      binding="basicHttpBinding" bindingConfiguration="AuthenticationServiceSoapBinding"
      contract="MyNamespace.AuthenticationService" name="AuthenticationServiceImplPort" />
  </client>
</system.serviceModel>

以下是我的错误消息:

在“webserviceurl”测试到web服务的连接时出错:System.ServiceModel.ProtocolException:响应消息的内容类型text/plain与绑定的内容类型(text/xml;charset=UTF-8)不匹配。如果使用自定义编码器,请确保IsContentTypeSupported方法已正确实现。响应的前788字节是:“

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<loginReponse xmlns="urn:xxxx">
<authKey>xxxx</authKey>
<authMetadata>
<IPaddress>https://MyWebApplicationURL</IPaddress>
<loginTimestamp>xxxx</loginTimestamp><levelOfAssurance>
<AuthMechanism>xxxx</AuthMechanism>
<VettingAssertion>xxxx</VettingAssertion>
</levelOfAssurance>
</authMetadata>
<errorText></errorText>
<successfulLoginFlag>true</successfulLoginFlag>
<userSummary>
<GUID>xxxx</GUID>
<commonName>xxxx</commonName>
<loginName>xxxx</loginName>
</userSummary>
<passwordExpiryDays>xxxx</passwordExpiryDays></loginReponse>
</soap:Body>
</soap:Envelope>

共有1个答案

酆奇文
2023-03-14

问题是,当服务应该用text/xmlapplication/xml响应时,它却用text/plain响应,这正是WCF绑定为了正确处理它所需要的。从根本上说,这是服务端的一个“问题”:他们返回XML,但称之为明文,从技术上讲,明文是准确的,但不像XML内容类型那样具体。在WCF方面,内置的协议处理相当严格,并希望内容类型为text/xmlapplication/xml,以便进行反序列化。

您可以通过编写支持text/plain但将其解析为XML的自定义WCF编码器来阻止它们的内容类型问题。

 类似资料:
  • 我试图开发一个使用WCF向web服务提交简单登录请求的web应用程序,但我不断收到“响应消息的内容类型text/plain不匹配”错误,尽管web服务似乎返回了有效的XML。 我查过几十个类似的S.O.并排除了更常见的可能性: 我可以从响应中看到返回的不是错误页(如本文所述)。 我似乎没有绑定不匹配的问题(如这里所讨论的)。我的应用程序和web服务都使用SOAP 1.1,我指定了“BasicHtt

  • G-WAN4.3.11正在以“text/plain”类型返回我的所有csp文件。这怎么能修好?!目前,它只是一个静态文件服务器。 例如,//127.0.0.1:8080/?hello.py以“Hello,Python! ”(作为text/plain)响应 这应该返回“Hello,Python!”不显示 (以text/html形式)

  • 我有一个要求,其中,作为Web服务[Java]的一部分,我将作业的详细信息输入数据库,数据库由Windows服务[C#]异步处理,并对Javaweb服务通知作业的状态。 情景: 客户端对JavaWeb服务进行同步Restful调用。 JavaWeb Service将作业详细信息输入数据库(类似于进行异步调用),并等待Windows Service的响应(这是对JavaWeb Service的新HT

  • 我试图使用第三方Web服务(基于php)在asp.netc#应用程序,但失败的服务配置。已经尝试添加服务/Web引用-所有相同的错误: 响应消息的内容类型 text/html 与绑定的内容类型不匹配(text/xml;charset=utf-8)。如果使用自定义编码器,请确保正确实现 IsContentTypeSupport 方法。响应的前 402 个字节是:” [已手动编辑响应以正确显示 对我来

  • 我在使用Spring5 reactive WebClient时遇到了一个问题,当时我请求一个endpoint,该endpoint返回一个格式正确的json响应,内容类型为“text/plain;charset=utf-8”。例外情况是 以下是我提出请求的方式: 编辑:头是“正确”设置的(Accept,Content-Type),我尝试了不同的Content-Type(json,json+UTF8,

  • 根据文档,响应自动作为JSON、XML或字符串对象提供,具体取决于响应内容。 在我的例子中,我的响应的内容类型为text/plain 这在我将字符串转换为响应,然后验证的地方工作(我已经逃过了所有的反斜杠) 这是失败的。当响应也可用作字符串时,为什么会失败 com.intuit.karate.exception.KarateExc0019:路径: $[*], 实际:["a. b. c匹配\"(\d