2013-07-26 42 views
5

Tôi đang gặp sự cố khi nói chuyện với Java WS. Tôi đang sử dụng "wsHttpBinding" ràng buộc với chứng chỉ ứng dụng khách để xác thực, mã hóa thư được đặt là "Văn bản", .net framework là 4.0. Phía máy chủ là Java và tôi không có quyền kiểm soát nó. Kết nối đang được proxied thông qua Fiddler (đây là cách tôi nhìn thấy yêu cầu trên dây, thân thiện hơn nhiều so với truy tìm "System.Net").WCF khách hàng nói chuyện với Java WS, ngoại lệ: Các loại nội dung ứng dụng/xop + xml; type = "application/soap + xml" của thông báo phản hồi

Exception tôi nhận được là như sau:

Kiểu nội dung application/XOP + xml; type = "application/soap + xml" của thông báo phản hồi không khớp với kiểu nội dung của ràng buộc (application/soap + xml; charset = utf-8).

Nếu tôi thay đổi mã hóa thông điệp tới "MTOM", sau đó thay đổi ngoại lệ:

Kiểu nội dung application/XOP + xml; type = "application/soap + xml" của thông báo phản hồi không khớp với kiểu nội dung của liên kết (multipart/related; type = "application/xop + xml").

Máy chủ đang chấp nhận cả mã hóa tin nhắn "Văn bản" và "Mtom" để yêu cầu và phản hồi luôn giống nhau. Đây là phản hồi thô mà tôi nhận được từ máy chủ:

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> 

Từ tất cả tài liệu mà tôi đã đọc, phản hồi đang được trả về ở đâu đó giữa thông điệp SOAP thông thường và MTOM. Tôi đang nói điều này bởi vì mỗi ví dụ mà tôi đã thấy nói rằng yêu cầu và đáp ứng MTOM sử dụng MIME như một phong bì để giao tiếp: thông điệp SOAP thông thường được bao bọc trong gói XOP, và sau đó thông báo XOP này được bao bọc với MIME. Ngay cả khuyến nghị W3C cũng sử dụng MIME cho các gói XOP: W3C: XML-binary Optimized Packaging. Trích từ liên kết này:

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

Nếu tôi cố gắng gọi dịch vụ web sử dụng công cụ "soapUI" (viết bằng Java, có sẵn từ "www.soapui.org"), hãy gọi dịch vụ được thực hiện thành công và đáp ứng được phân tách mà không cần bất kỳ vấn đề.

FYI, đây là một bài đăng chéo từ MSDN WCF forum., Nhưng chưa có câu trả lời nào.

Bất cứ ý tưởng được đánh giá cao, cảm ơn trước,

Alex

+0

Tôi đang đối mặt với cùng một vấn đề chính xác. Tạo một ràng buộc tùy chỉnh và thiết lập messageVersion = "Soap12" đã không làm việc cho tôi. Một sự khác biệt mà tôi có thể thấy là cuộc gọi dịch vụ web của tôi là https nhưng bài đăng này dành cho http dường như. –

+0

Bạn đã tìm thấy giải pháp chưa? Im có cùng một vấn đề. Nhưng cấu hình liên kết được đề xuất trong câu trả lời đầu tiên không hợp lệ đối với web.config. –

+0

HTTP vs HTTPS không có sự khác biệt: đây chỉ là chi tiết vận chuyển. Vấn đề là định dạng của tin nhắn.Vấn đề tôi gặp phải là thực thể chính phủ đang sử dụng một số máy chủ Java (sử dụng ngăn xếp WebSphere của IBM) và ngăn xếp của họ đang tạo ra các thông điệp không phù hợp. Có hai lựa chọn trong trường hợp của tôi: 1.) sử dụng SoapUI như ứng dụng bên ngoài sẽ tải xuống thông báo và sau đó phân tích cú pháp XML trong C# 2.) chỉnh sửa XML thô đi qua mạng và thay đổi XML tin nhắn để phù hợp với các tiêu chuẩn -> mọi thứ đã được thực hiện trong C#. – alemarko

Trả lời

0

Hãy thử thiết lập mã hóa thông điệp trong cấu hình ràng buộc để messageEncoding="Mtom"basicHTTPBinding thay vì wsHTTP một ...

Hy vọng nó sẽ giúp!

2

Tôi cũng đang sử dụng CXF và có ứng dụng khách C#. Hãy thử sửa đổi cài đặt ràng buộc của bạn, thay thế textMessageEncoding bằng mtomMessageEncoding. Một cái gì đó như thế này:

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