2013-07-26 28 views
5

Mam problemy z rozmową z Java WS. Używam wiązania "wsHttpBinding" z certyfikatami klienta do uwierzytelniania, kodowanie wiadomości jest ustawione jako "Tekst", .NET Framework to 4.0. Po stronie serwera jest Java i nie mam nad nią kontroli. Połączenie jest prowadzone przez Skrzypka (w ten sposób widzę żądania na drucie, znacznie bardziej przyjazne dla użytkownika niż śledzenie "System.Net").Klient WCF rozmawiający z Java WS, wyjątek: zawartość typu application/xop + xml; type = "application/soap + xml" komunikatu odpowiedzi

Wyjątek otrzymuję jest następujący:

typ zawartości application/xml xop +; type = "application/soap + xml" komunikatu odpowiedzi nie jest zgodny z typem treści powiązania (application/soap + xml; charset = utf-8).

Jeśli zmienić kodowanie wiadomość startową do "", a następnie zmienia się wyjątek:

Typ zawartości application/xml xop +; type = "application/soap + xml" komunikatu odpowiedzi nie odpowiada typowi treści powiązania (multipart/related; type = "application/xop + xml").

Serwer akceptuje zarówno kodowanie wiadomości "Tekst" i "Mtom" na żądanie, a odpowiedź jest zawsze taka sama. Jest to surowy odpowiedź, że dostaję od serwera:

HTTP/1.1 200 OK 
X-Backside-Transport: OK OK 
Connection: Keep-Alive 
X-Powered-By: Servlet/3.0 
SOAPAction: "" 
Content-Type: application/xop+xml; type="application/soap+xml" 
Content-Language: en-US 
Date: Thu, 25 Jul 2013 13:05:09 GMT 
Content-Length: 628 

<?xml version="1.0" encoding="UTF-8"?> 
<env:Envelope ... </env:Envelope> 

Od wszystkich docs, które czytałam, że odpowiedź jest zwracany jest gdzieś pomiędzy regularnym komunikatu SOAP i wiadomości o maksymalnej masie startowej. Mówię to, ponieważ każdy przykład, który widziałem, mówi, że żądanie i odpowiedź MTOM używają MIME jako koperty do komunikacji: zwykły komunikat SOAP jest zawarty w pakiecie XOP, a następnie ten komunikat XOP jest otoczony MIME. Nawet rekomendacja W3C używa MIME dla pakietów XOP: W3C: XML-binary Optimized Packaging. Fragment ten link:

Content-Type: Multipart/Related;boundary=... 

jeśli próbuję wywołanie usługi WWW za pomocą funkcji „SoapUI” (napisany w Javie, dostępny z „www.soapui.org”), wywołanie usługa została pomyślnie wykonana i odpowiedź jest analizowana bez problem.

FYI, jest to wpis przekierowania z MSDN WCF forum., Ale nie ma tam jeszcze odpowiedzi.

Każdy pomysł jest doceniana, dzięki z góry,

Alex

+0

Mam do czynienia dokładnie z tym samym problemem. Tworzenie niestandardowego powiązania i ustawianie messageVersion = "Soap12" nie działa dla mnie. Jedną różnicą, jaką widzę, jest moje zgłoszenie do usługi internetowej https, ale wydaje mi się, że ten post jest dla http. –

+0

Czy znalazłeś rozwiązanie? Mam ten sam problem. Ale konfiguracja wiązania sugerowana w pierwszej odpowiedzi nie jest poprawna dla pliku web.config. –

+0

HTTP vs HTTPS nie robi różnicy: to tylko szczegóły dotyczące transportu. Problem polega na formatowaniu wiadomości.Problem polegał na tym, że jednostka rządowa używała jakiegoś serwera Java (używając stosu IBM WebSphere), a ich stos generował komunikaty niezgodne. W moim przypadku były dwie opcje: 1.) użyj SoapUI jako zewnętrznej aplikacji, która pobierze wiadomość, a następnie przeanalizuje XML w C# 2.) edytuj surowy XML, który przychodzi przez sieć i zmieniaj komunikat XML, aby był zgodny ze standardami -> to sposób, w jaki wszystko zostało zrobione w języku C#. – alemarko

Odpowiedz

0

Spróbuj ustawić kodowanie wiadomości w konfiguracji wiązania messageEncoding="Mtom" i basicHTTPBinding zamiast wsHTTP jednym ...

Nadzieję, że to pomaga!

2

Używam również CXF i mam klienta C#. Spróbuj zmodyfikować ustawienie wiązania, zamień textMessageEncoding na mtomMessageEncoding. Coś takiego:

<binding name="yourSoapBinding"> 
    <mtomMessageEncoding messageVersion="Soap12"/> 
    <httpTransport /> 
</binding>