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

以“text/plain”的形式接收Web服务XML响应。(又是一个内容类型错误。)

许波涛
2023-03-14

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

我查过几十个类似的S.O.并排除了更常见的可能性:

  1. 我可以从响应中看到返回的不是错误页(如本文所述)。
  2. 我似乎没有绑定不匹配的问题(如这里所讨论的)。我的应用程序和web服务都使用SOAP 1.1,我指定了“BasicHttpBinding”。
  3. 错误消息中包含的响应显示有效的XML,其中包含所需的用户和响应变量。
  4. 我可以在Web服务日志文件中看到login方法正在完全执行,而不会引发异常。
  5. 我将XML响应粘贴到W3Schools验证器中,没有出错。

还有什么原因导致了我的错误?为什么这不能被识别为有效的XML?

我将.NET 4.0和Visual Studio2010用于我的应用程序,该应用程序在单独的服务器上与Java/Tomcat web服务通信

以下是我的登录代码的相关摘录:

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>

‘。

服务器堆栈跟踪:位于System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest请求,HttpWebResponse响应,HttpChannelFactory工厂,WebException responseException,ChannelBinding ChannelBinding)位于System.ServiceModel.Channels.HttpChannelFactor.HttpRequestChannel.WaitForReply(TimeSpan超时)位于System.ServiceModel.Channels.RequestChannel.request(Message消息,TimeSpan超时)位于System.ServiceModel.Channels.ServiceChannel.Call(String操作,Boolean单向,ProxyOperationRuntime操作,Object[]ins System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime操作)(位于System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage消息)

在[0]处重新引发异常:在System.Runtime.Remoting.Proxies.RealProxy.HandlereTurnMessage(IMessage reqMsg,IMessage retMsg)在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData和msgData,Int32类型)在MyNamespace.AuthenticationService.AuthenticationService.Login(loginRequest请求)在MyNamespace.AuthenticationService.AuthenticationServiceClient.MyNamespace.AuthenticationService.AuthenticationService.Login(loginRequest请求)在C:...\AuthenticationService\Reference.cs:在在(UserCredentials凭据)(在C:...\AuthenticationService\Reference.cs:第1722行
在MyNamespace.Forms.TestWebService.TestLogin_Click(对象发送方,EventArgs e)(在C:...\TestWebService.aspx.cs:第284行

下面是Wireshark中Web服务的响应:

共有1个答案

李招
2023-03-14

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

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

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

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

  • 我试图使用第三方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,

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

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