ここでは WCF 初心者ですが、.NET 4.0 クライアントが JBOSS でホストされている Web サービスを使用できるようにしようとしています。Web サービスからの結果は、x-fire を使用してシリアル化されていると思います。クライアント側は WCF を使用してサービスに接続しています。これは、Ntlm を使用して呼び出し元を認証する内部 Web サービスにあります。
クライアントにサービス参照を追加し、サーバー上のメソッドの 1 つを呼び出すことができます。リクエストが送信されていることを確認しました。実際にレスポンスが返ってきています。問題は、応答が従来の SOAP 形式ではないことです。標準の WCF バインディングではこれを解釈できないと思います。アプリに関する情報は次のとおりです。
app.config
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="myBinding" >
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://server/services/WS" binding="basicHttpBinding"
bindingConfiguration="myBinding" contract="myContract"
name="myEndpoint" />
</client>
</system.serviceModel>
リクエストがサーバーに送信されています...
POST http://server/services/WS HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Accept-Encoding: gzip, deflate,gzip, deflate,gzip, deflate
Authorization: NTLM
Host: server
Content-Length: 145
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><getAppInfo xmlns="http://ws.application.com"/></s:Body></s:Envelope>
サーバーから返される応答 (フィドラーから取得)...
HTTP/1.1 200 OK
Connection: close
Date: Mon, 18 Jun 2012 19:48:04 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Set-Cookie: blah; Path=/
Content-Type: multipart/related; type="application/xop+xml"; start="<soap.xml@xfire.codehaus.org>"; start-info="text/xml"; boundary="----=_Part_14_20837339.1340048884628";charset=UTF-8
------=_Part_14_20837332219.1340048884628
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: 8bit
Content-ID: <soap.xml@xfire.codehaus.org>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><getAppInfoResponse xmlns="http://ws.app.com"><out><apiVersion xmlns="http://dto.ws.app.com">55</apiVersion><dbBuildNumber xmlns="http://dto.ws.app.com">12312</dbBuildNumber><appBuildNumber xmlns="http://dto.ws.app.com" xsi:nil="true" /></out></getAppInfoResponse></soap:Body></soap:Envelope>
------=_Part_14_20837332219.1340048884628--
.netクライアントからのエラーメッセージは次のとおりです...
The content type multipart/related; type="application/xop+xml"; start="<soap.xml@xfire.codehaus.org>"; start-info="text/xml"; boundary="----=_Part_14_20837332219.1340048884628";charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 738 bytes of the response were: '
残りの例外は、サーバーからの最初の応答を繰り返すだけです。
私の推測では、カスタム バインディングなどを作成する必要があります。これを行う方法の良い例を探してみましたが、それらはすべて、すべてを接続するのを妨げる何かを除外しているようです。カスタム バインディングを機能させることができれば、応答を解析し、------ 行の間のすべてを WCF デシリアライザーに渡すことになると思います。これは実際の SOAP 応答であるためです。
これを行う方法、従うべき良い例、またはおそらくまったく別のアプローチについて誰かアイデアがありますか?
ところで、Web サービスはブラック ボックスであり、そこでコーディングを変更することはできません。
ありがとう。