Layanan web WCF untuk Java interop tampaknya mengejutkan bermasalah. Adakah sumber daya yang bagus?

13

Dengan proyek baru-baru ini. Tim pengembang berbasis Net kami telah ditugaskan untuk mengintegrasikan dengan seluruh layanan web berbasis java di seluruh dunia, dan kami benar-benar telah secara mengejutkan (yah, kami tentu tidak terkejut lagi) sejumlah besar masalah karena XML yang dihasilkan oleh WCF tidak diterima oleh layanan java.

Tampaknya juga tidak ada informasi yang benar-benar bagus untuk ditemukan tentang masalah ini, kami mendapatkan beberapa tips bagus dari blog WCF Yaron Nave yang sangat baik, http://webservices20.blogspot.com , dan juga di forum MSDN WCF http: //social.msdn.microsoft.com/Forums/en-US/wcf/threads .

Adakah orang di sini yang benar-benar merasa bahwa mereka memahami hal ini, dan mengetahui sumber daya definitif pada subjek? Akan tertarik dengan tips tentang buku, blog, atau situs web apa pun.

Sunting:
Saya bingung dalam menetapkan jawaban yang diterima di utas ini, karena masing-masing dari dua jawaban terbaik memiliki beberapa nilai:
1. Kami mungkin akan berakhir dengan melakukan lebih banyak implementasi HTTP Webrequest alih-alih melawan WCF.
2. Tetapi WCF Express Interop Bindings 1.0 juga merupakan tip yang sangat masuk akal.

Bjørn
sumber
Saya tidak tahu apa-apa tentang WCF, tetapi apakah ini memproduksi paket XML berbasis SOAP atau hanya sepotong XML yang dapat dikonsumsi oleh layanan RESTful?
Martijn Verburg
1
Mengembalikan XML, JSON atau RDF + XML.
Alan B
dapatkah Anda memberikan contoh apa yang salah antara klien wcf dan layanan web java? maksud Anda layanan web = sabun atau sesuatu yang berbeda?
k3b
1
Itu di luar ruang lingkup pertanyaan ini untuk pergi ke spesifik, Anda dapat memeriksa profil saya pada stack overflow untuk contoh. Di sini, saya hanya ingin mendengar jika ada orang lain yang memiliki masalah yang sama dengan klien WCF (atau .Net secara umum) interop dengan layanan web berbasis platform lain.
Bjørn

Jawaban:

15

Ah ya ... SABUN, grail suci komputasi yang dibanggakan. Lingua franca yang menjanjikan interop antara sistem di seluruh dunia.

Dan kemudian Anda masuk ke perbedaan antara implementasi SOAP di Java dan PHP dan .NET. Atau bahkan antara layanan SOAP WebSphere dan klien SOAP Apache. Tidak apa-apa berurusan dengan standar kompatibilitas WS-I yang berbeda. Sekarang tolong beri tahu saya mengapa Anda memerlukan standar kompatibilitas untuk protokol yang dibangun untuk kompatibilitas , berbicara tentang ironis (dan maksud saya ironi nyata, bukan merek ironi Alanis Morrissette ).

Satu-satunya saat Anda tidak akan mengalami masalah dalam mendapatkan dua titik akhir komunikasi SOAP adalah ketika keduanya berada pada platform yang sama dan dalam kebanyakan kasus platform tersebut akan memiliki protokol operasi jarak jauh yang lebih efisien.

Apa yang saya katakan di sini adalah bahwa untuk sebagian besar, sabun tidak berguna. Sekarang sabun kecil, saya menggunakannya setiap hari dan saya bersyukur bahwa kebanyakan orang melakukan hal yang sama.

Yang sedang berkata, jika Anda bersikeras memukul kepala Anda ke dinding bata. Berikut ini adalah tempat yang baik untuk memulai. Microsoft memiliki serangkaian binding untuk mengaktifkan interop dengan sebagian besar server Java utama. Bagian yang menyenangkan tentu saja mencari tahu mana yang berfungsi dengan layanan mana yang Anda integrasikan.

Michael Brown
sumber
5
SOAP adalah CORBA baru :)
gbjbaanb
Entah bagaimana, saya sepertinya berhasil melakukannya agak sering dalam proyek integrasi klien. YMMV rupanya.
David J. Liszewski
9

Menurut pendapat saya, pengamatan Anda cukup akurat. Implementasi tingkat tinggi komunikasi berbasis XML biasanya tidak kompatibel dengan platform yang berbeda, bahkan jika mereka sedang berdua disebut "SOAP". Perbedaan yang halus dalam implementasi, mungkin keduanya dalam lingkup standar yang diterapkan, menciptakan masalah dalam penggunaan kehidupan nyata.

Rekomendasi saya untuk penyedia layanan: Gunakan implementasi sederhana daripada implementasi yang sangat kompleks dan secara teoritis lebih baik. Misalnya, jangan sertakan skema otentikasi yang sangat rumit jika Anda tidak membutuhkannya.

Rekomendasi saya untuk konsumen layanan (Anda, saya kira): Ketika berkomunikasi dengan implementasi tingkat tinggi pada platform yang berbeda dari platform Anda, turunkan ke implementasi tingkat yang lebih rendah. Tiba-tiba menjadi sangat sederhana jika Anda hanya mencari tahu apa XML sebenarnya untuk mengirim dan kemudian menggunakan praktik pengkodean yang baik untuk melakukannya, sebagai alternatif untuk bersikeras menggunakan implementasi tingkat tinggi dari platform Anda sendiri.

Semoga itu tidak terlalu abstrak. Singkatnya , ketika Anda berada di platform .NET yang terhubung ke platform Java, Anda mungkin ingin merakit header dan xml dalam HttpWebRequest dan mengirimkannya dengan cara itu.

Niels Brinch
sumber
4

Anda akan memiliki masalah yang sama dengan menggunakan layanan web PHP juga.

Satu-satunya jawaban kami adalah mengubah tipe protokol menjadi REST daripada SOAP. Kami tidak pernah memiliki barang-barang SOAP untuk dioperasikan, begitu banyak untuk Simple!

gbjbaanb
sumber
Dalam kebanyakan kasus, kami sama sekali tidak memiliki opsi untuk mengubah layanan web yang ada dengan cara apa pun, kami harus menghubungkannya dengan SOAP, apa pun yang terjadi. Jadi saya khawatir tidak ada jawaban yang terpecahkan untuk Anda. ;)
Bjørn
1
> "tidak ada opsi untuk mengubah layanan web yang ada dengan cara apa pun" Dalam hal ini; persiapkan dirimu, kau dalam perjalanan yang sulit. Saya baru saja pulih dari 2 minggu head-banging, mencoba memanggil layanan web wcf / sabun dari java / android. Keselamatan saya adalah bahwa saya - tidak seperti Anda - memiliki akses ke layanan dan membuatnya mengekspos titik akhir REST / JSON. Jalan untuk pergi. Jika kamu bisa.
BaBu
@ Bjørn oh well, maaf untuk memberi tahu Anda tentang hal ini tetapi untuk menggunakan istilah teknis, Anda kacau. Saya kira satu-satunya jawaban adalah berhenti menggunakan WCF dan menggunakan klien SOAP yang berbeda.
gbjbaanb
Tim kami tertawa dan menangis karena jawaban Anda. :) Terima kasih tuan-tuan.
Bjørn