2016-12-15 18 views
10

Đây là tình huống, có một khách hàng hiện có, tôi cần phải xây dựng một máy chủ khách hàng sẽ được tiêu thụ. Tôi không sở hữu khách hàng và không có khả năng thay đổi nó. Thông điệp xà bông khách hàng có thể sauC# - Hãy WCF Chấp nhận bất kỳ tiền tố tin nhắn xà phòng

enter image description here

Làm thế nào để làm cho dịch vụ của tôi chấp nhận cả các tiền tố được khoanh tròn. Hiện tại nó chỉ chấp nhận tiền tố "c2b" và nó không xử lý bất kỳ yêu cầu nào với tiền tố "ns1".

Trả lời

4

Bạn đang chuyển DTO (đối tượng Lớp) đến dịch vụ nhưng dịch vụ wcf của bạn không thể nhận ra lớp chính xác. Vì vậy, để làm cho WCF chấp nhận bất kỳ tiền tố chỉ cần thêm tiền tố đó với vị trí đối tượng thích hợp. Bạn chỉ cần thêm một thuộc tính xmlns khác vào <soapenv:Envelope>.

Ví dụ:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ns1="http://cps.huawei.com/cpsinterface/c2bpayment" xmlns:c2B="http://cps.huawei.com/cpsinterface/c2bpayment"> 
+0

Tôi có thể thêm tệp ở trên vào dịch vụ nào? –

+0

vui lòng tham khảo liên kết này để thay đổi Thông báo Soap. [Thay đổi thông báo xà phòng] (https://cmatskas.com/changing-soap-message-data-and-namespaces-with-c/) –

1

Thành thật mà nói, bạn có thể lên một con lạch ở đây. Bạn có một máy khách đang cung cấp một thông điệp SOAP hoàn toàn không hợp lệ - nó đang sử dụng một tiền tố không gian tên mà nó không khai báo.

Tôi không có thời gian để dùng thử, nhưng suy nghĩ đầu tiên của tôi là sử dụng XmlNamespaceDeclarationsAttribute có thể hoạt động - bạn có thể cung cấp nó trên lớp C2BPaymentConfirmationRequest gốc của bạn và điền trước vào hàm tạo của bạn bằng "ns1" tại "http://cps.huawei.com/cpsinterface/c2bpayment". Đáng thử. Hãy cho chúng tôi biết nếu nó hoạt động.

2

Shubham Sharma's answer chính xác 100%.

Để thêm giải thích thêm một chút, các tiền tố này chỉ là bí danh của các không gian tên bạn đã khai báo. Họ không có ý gì cả. Nếu bạn muốn sử dụng ns1 làm tiền tố, tất cả những gì bạn cần làm là thay thế xmlns: c2b bằng xmlns: ns1 ở trên cùng.

Trong trường hợp của bạn, khách hàng không biết cách tạo yêu cầu. Có lẽ tốt hơn là khuyên họ sử dụng một số công cụ tạo yêu cầu dựa trên wsdl - chẳng hạn như SoapUI.

Các vấn đề liên quan