.Net 4.0 から Java ベースのサービスを利用しようとしています。(C# コンソール/Windows サービス)
VS の Add Service Reference
ダイアログを使用してサービス参照を追加しました。
サービスは WebSphere 8 でホストされ、WSDL 定義は cxf を使用して生成されます。
クライアント アプリは Windows Server 2008 R2 SP1 で実行されています。ただ、SP1以降はwindows updateが適用されていないと思います。
問題はときどき発生します。サービス メソッドへの呼び出しはすべて例外を返します。エラーは次のとおりです。
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 件のリクエストが送信され、場合によっては 30 分後に送信されます。ただし、この例外が発生すると、サービスへのすべての呼び出しでこの例外が返されます。
サービス側では、呼び出しが Java アプリケーションに到達したという記録さえありません。私の呼び出しをサービスに渡す代わりに、WebSphere が wsdl 定義を送信するようです。
クライアント アプリを閉じて再起動しても、エラーは解消されません。システムを完全に再起動するだけで、エラーが消えます。(更新:エンドポイント アドレスから ?wsdl を削除し、システムを再起動する必要がなくなり、クライアント アプリを再起動するだけで、再び機能するようになります。)
エラーに直面したとき、私は Soap UI でサービス メソッドを呼び出し、例外なく結果を取得しました。したがって、サービス側にはおそらく何も問題はありません。
私の唯一の推測では、これは .Net Framework 4.0 のバグです。どんな助けでも大歓迎です。