2013-11-18 2 views
3

я написал ФОС C# клиент, который потребляет Java WebService:Как клиент WCF может использовать многопользовательский ответ java webservice?

var client = new abcClient("abc"); 
var response = client.AbcTransaction(msg); 

В WCF связывания информации из web.config является:

<customBinding> 
<binding name="abcSOAP"> 
    <textMessageEncoding messageVersion="Soap12" /> 
    <httpsTransport requireClientCertificate="true" /> 
</binding> 
</customBinding> 

Это выглядит довольно прямо вперед, вправо ? ... И действительно, SoapFaults легко потреблять:

HTTP/1.1 500 Internal Server Error 
Content-Length: 783 
Content-Type: application/soap+xml;charset=UTF-8 
Server: Microsoft-IIS/8.0 
Date: Mon, 18 Nov 2013 14:06:18 GMT 

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
<soap:Body><soap:Fault>... 

Однако вебсервис посылает «обычные» ответы в многочастного/связанного типа содержимого:

HTTP/1.1 200 OK 
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:c79210c3-bbef-4aa3-82ae-6a20c7a96564"; start="<[email protected]>"; start-info="application/soap+xml" 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Server: Microsoft-IIS/8.0 
Date: Mon, 18 Nov 2013 14:11:25 GMT 
Content-Length: 658 

--uuid:c79210c3-bbef-4aa3-82ae-6a20c7a96564 
Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"; 
Content-Transfer-Encoding: binary 
Content-ID: <[email protected]> 

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">... 

Это приводит к ProtocolException в клиенте WCF, потому что WCF-клиент не ожидает ответ на многочастный/связанный ответ. Сообщение ProtocolException является (на немецком языке):

Der Inhaltstyp "многочастный/связанные, типа =" приложение/ХОРЫ + XML "; границы =" UUID: ead716a3-4b8b-4207-ad66-b9f18ae368b2" ; start = ""; start-info = "application/soap + xml" "der Antwortnachricht stimmt nicht mit dem Inhaltstyp der Bindung (application/soap + xml; charset = utf-8) überein. Wenn Sie einen benutzerdefinierten Encoder verwenden, sollten Sie sicherstellen, dass die IsContentTypeSupported-Methode korrekt Implementiert ist. Die Ersten 1024 Bytes дер Antwort Варен: ...

На английском языке:

Тип содержимого "многочастному/связанные, тип =" приложения/ХОР + XML "; граница =" UUID: ead716a3-4b8b-4207-ad66-b9f18ae368b2 "; start =" "; start-info =" application/soap + xml "" ответного сообщения не соответствует типу содержимого привязки (application/soap + xml ; charset = utf-8). Если вы используете пользовательский кодер, убедитесь, что метод IsContentTypeSupported реализован правильно. Первые 1024 байт ответа были: ...

Кто-нибудь есть идея, как я могу потреблять это многослойное/сообщение, связанное с клиентом WCF (без использования класса HttpWebRequest)? Есть ли какая-либо конфигурация для этого szenario?

+0

Вы пытались переключиться с 'text' на' Mtom' для кодирования SOAP-сообщений? Config: ''/Code: 'binding.MessageEncoding = WSMessageEncoding.Mtom;' – MaxSC

+0

Да, похоже, это ничего не меняет. (Я добавлю информацию привязки к моему вопросу) – chanser

ответ

2

Советы Макс 'и Мехмета показали правильное направление, но мне пришлось немного поменяться. Поскольку я использовал элемент в, конфигурация wcf игнорировала атрибут messageEncoding = "Mtom".

Вместо того чтобы использовать атрибут, кажется, лучше использовать элемент непосредственно:

<binding name="energylinkSOAP"> 
    <mtomMessageEncoding messageVersion="Soap12" /> 
    <httpsTransport requireClientCertificate="true" /> 
</binding> 

К этому можно также определить другие конфигурации, такие как messageVersion.

+0

Удивительный, точно что я искал. Если вы пытаетесь использовать Oracle ADF Services и делаете это через прокси-сервер, они могут преуспеть, но .NET будет генерировать исключение из типа ответа. Выполняя это программно ([binding] .MessageEncoding = WSMessageEncoding.Mtom;) решил мою проблему. – Tor

0

Я думаю, что преобразование системы в MTOM будет работать для этого.

+0

Привет, Мехмет, я тоже этого ожидал, но это ничего не меняет, если я добавлю messageEncoding = "Mtom" в chanser

Смежные вопросы