我正在尝试使用 .Net 4.0 中的基于 java 的服务。(C# 控制台/Windows 服务)
我已经使用 VS 的 Add Service Reference
对话框添加了服务引用。
该服务托管在 WebSphere 8 上,并且使用 cxf 生成 WSDL 定义。
客户端应用程序在 Windows Server 2008 R2 SP1 上运行。但我认为在 SP1 之后不会应用任何 Windows 更新。
问题是有时对服务方法的所有调用都会返回异常。错误如下:
The content type text/xml;charset=UTF8 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8).
If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly.
The first 1024 bytes of the response were: '<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions name="MyServiceImplService" targetNamespace="http://impl.webService.myService.com/" xmlns:ns1="http://webService.myService.com/" xmlns:ns2="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://impl.webService.myService.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:import location="http://10.1.1.1/myService/webService/myService?wsdl=myService.wsdl" namespace="http://webService.myService.com/"></wsdl:import>
<wsdl:binding name="MyServiceImplServiceSoapBinding" type="ns1:myService">
<soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap12:binding>
<wsdl:operation name="disableCard">
<soap12:operation soapAction="" style="documen'..
这是我的客户端应用程序的 WCF 配置:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="MyServiceImplServiceSoapBinding">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://10.1.1.1/myService/webService/myService?wsdl"
binding="customBinding" bindingConfiguration="MyServiceImplServiceSoapBinding"
contract="MyServiceReference.myService" name="MyServiceImplPort" />
</client>
</system.serviceModel>
我认为这与 WCF 配置没有任何关系,因为所有方法都可以正常工作并且突然之间,所有方法都返回此异常。
该错误似乎是随机出现的,没有明显的原因。有时在 2 天后约 1,000,000 个请求后,有时在半小时后。但是当这个异常出现时,对服务的每次调用都会返回这个异常。
在服务端,没有日志表明调用甚至到达了 java 应用程序。似乎 WebSphere 发送 wsdl 定义而不是将我的调用传递给服务。
关闭并重新启动客户端应用程序不会使错误消失。只有完全重新启动系统才能使错误消失。(更新:似乎从端点地址中删除 ?wsdl ,删除了重新启动系统的需要并重新启动客户端应用程序足以使其再次工作。)
遇到错误时,我已经使用 Soap UI 调用了服务方法,并且毫无例外地得到了结果。因此,服务方面可能没有任何问题。
我唯一的猜测是这是 .Net Framework 4.0 中的一个错误。任何帮助是极大的赞赏。