Tôi có 4 cổng (WW, EU, AU, US), mỗi một trong số họ có dịch vụ web riêng của mình (thông qua PHP có nghĩa là tôi không có quyền kiểm soát).Lỗi XML khi gọi dịch vụ web
Đối với 4 dịch vụ web đó, tôi có 4 khách hàng (được tạo bởi VS.Net Add Web Reference).
Có một phương pháp được gọi là CommonMethod
nó giống nhau trên tất cả các dịch vụ web, trả về một đối tượng thuộc loại CommonClass
.
- Khi tôi gọi là phương pháp (sử dụng lớp proxy EU) Tôi nhận được một InvalidOperationException
There is an error in XML document (2, 615).
, và InnerException nói "Không thể gán đối tượng kiểu NS.com.AU.CommonClass đến một đối tượng kiểu NS.com. EU.CommonClass. ". - Khi tôi gọi phương thức đó (sử dụng lớp proxy Hoa Kỳ), tôi nhận được InvalidOperationException
There is an error in XML document (2, 615).
và InnerException cho biết "Không thể gán đối tượng kiểu NS.com.AU.CommonClass cho đối tượng kiểu NS.com.US.CommonClass ". - Khi tôi gọi phương thức đó (sử dụng lớp proxy AU), Không có ngoại lệ nào được ném.
- Khi tôi gọi phương thức đó (sử dụng lớp proxy của WW) Tôi nhận được InvalidOperationException
There is an error in XML document (2, 615).
và InnerException nói "Không thể gán đối tượng kiểu NS.com.AU.CommonClass cho một đối tượng kiểu NS.com.WW.CommonClass ".
Tôi đã tìm kiếm trên web về lỗi như vậy, đó là XML nên rất nhiều nội dung không thích hợp xuất hiện và không thể tìm thấy thứ gì đó hữu ích.
Bây giờ tôi nhận thấy, 4 dịch vụ web đang sử dụng cùng một không gian tên trong tài liệu WSDL của họ (xmlns: tns = "urn: rambo.com: RamboComApi"). Đây có phải là nguồn gốc của sự nhầm lẫn và loại trừ ngoại lệ? Tôi có nên yêu cầu các tác giả của các dịch vụ web chọn không gian tên khác nhau cho mỗi dịch vụ web không?
Có vẻ như mã của bạn đang tạo kiểu đối tượng của NS.com.AU.CommonClass và lớp proxy duy nhất có loại đối sánh là lớp proxy AU. Tất cả những người khác phàn nàn rằng bạn đang cố gắng chỉ định NS.com.AU.CommonClass cho NS.com.EU.CommonClass, NS.com.US.CommonClass hoặc NS.com.WW.CommonClass.Nếu WSDL của chúng giống hệt nhau, bạn có thể sử dụng cùng lớp proxy nhưng chỉ thay đổi URL mục tiêu. – Dijkgraaf
Cảm ơn, bạn có ý nghĩa gì đó như [this] (http://stackoverflow.com/a/16407382/502436)? –
Không, bạn không cần phải thay đổi không gian tên, chỉ cần sử dụng proxy bạn đã tạo cho AU và chỉ cần đặt URL mục tiêu để gọi dịch vụ web thích hợp. – Dijkgraaf