我试图开发一个使用WCF向web服务提交简单登录请求的web应用程序,但我不断收到“响应消息的内容类型text/plain不匹配”错误,尽管web服务似乎返回了有效的XML。
我查过几十个类似的S.O.并排除了更常见的可能性:
还有什么原因导致了我的错误?为什么这不能被识别为有效的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服务的响应:
问题是,服务使用text/plain
响应,而它应该使用text/xml
或application/xml
响应,这是WCF绑定所期望的,以便正确处理它。从根本上说,这是服务端的一个“问题”:他们返回XML,但称其为明文,这在技术上是准确的,但不像XML内容类型那样具体。在WCF方面,内置的协议处理相当严格,并期望内容类型为text/xml
或application/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