Saya menulis C# client yang memanggil layanan web yang ditulis dalam Java (oleh orang lain). Saya telah menambahkan referensi web untuk klien saya dan saya'm dapat memanggil metode pada web service ok.
Layanan diubah untuk mengembalikan sebuah array dari objek, dan klien tidak benar mengurai kembali SABUN pesan.
MyResponse[] MyFunc(string p)
class MyResponse
{
long id;
string reason;
}
Ketika saya dihasilkan C# proxy panggilan layanan web (menggunakan SoapHttpClientProtocol.Memohon), saya mengharapkan MyResponse[] array dengan panjang 1, yaitu sebuah elemen tunggal. Apa yang saya dapatkan setelah Memanggil panggilan adalah sebuah elemen dengan id=0 dan alasan=null, terlepas dari apa layanan benar-benar kembali. Menggunakan packet sniffer, saya dapat melihat bahwa layanan ini kembali apa yang tampaknya menjadi sah sabun pesan dengan id dan alasan yang diatur ke nilai non-null.
Ada beberapa trik untuk mendapatkan C# klien untuk memanggil Java web service yang mengembalikan someobject[] ? Aku akan bekerja untuk mendapatkan dibersihkan demo jika diperlukan.
Edit: Ini adalah web referensi melalui "Menambahkan Referensi Web...". DIBANDINGKAN tahun 2005, .BERSIH 3.0.
Terima kasih untuk Xian, aku punya solusi.
Wsdl untuk layanan termasuk garis
<import namespace="http://mynamespace.company.com"/>
Sabun yang klien dikirim ke server memiliki atribut berikut pada semua elemen data:
xmlns="http://mynamespace.company.com"
Tapi xml muatan respon (dari pelayanan kembali kepada klien) tidak tidak memiliki namespace ini termasuk. Dengan bermain-main dengan HTTP response (yang saya diperoleh dengan WireShark), saya mengamati bahwa .NET proxy kelas benar mengambil MyResponse nilai jika aku memaksa xmlns atribut pada setiap kembali elemen data.
Singkat mengubah layanan, yang saya don't control, solusi untuk mengedit VS dihasilkan proxy kelas (misalnya Referensi.cs) dan cari baris seperti ini:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://mynamespace.company.com")]
public partial class MyResponse {
dan komentar XmlType atribut line. Ini akan memberitahu CLR untuk mencari respon elemen dalam default namespace daripada yang ditetapkan dalam wsdl. Anda harus mengulang ini setiap kali anda memperbarui referensi, tapi setidaknya ia bekerja.
Sudah lama, tapi sepertinya aku ingat memiliki masalah dengan sedikit perbedaan dalam cara default namespaces yang ditangani antara .Net dan Java web services.
Periksa dihasilkan c# proxy kelas dan setiap nama yang dinyatakan dalam (terutama default xmlns=""), terhadap apa yang Java pelayanan yang di harapkan. Tidak akan mungkin menjadi sangat halus perbedaan yang anda akan memiliki untuk menciptakan.
Jika hal ini terjadi maka anda akan memberikan lebih namespace deklarasi di c# atribut.
Dari pertanyaan anda, sepertinya anda punya klien yang bekerja pada satu titik, dan kemudian layanan diubah untuk mengembalikan sebuah array. Pastikan anda men-generate proxy sehingga kembali SABUN pesan deserialized pada klien. Itu't jelas anda telah melakukan ini - hanya untuk memastikan.