Apakah mungkin untuk kembali benda-benda dari WebService?

Bukannya kembali string umum, apakah ada cara untuk mengembalikan benda-benda klasik? Jika tidak: apa praktek-praktek terbaik? Apakah anda merefleksikan objek untuk xml dan membangun kembali objek pada sisi yang lain? Apa ada kemungkinan lain?

Larutan

Seperti disebutkan, anda dapat melakukan ini di .net melalui serialisasi. Secara default, semua asli jenis ini adalah serializable jadi hal ini terjadi otomatis untuk anda.

Namun jika anda memiliki jenis kompleks, anda perlu untuk menandai objek dengan [Serializable] atribut. Hal yang sama berlaku dengan jenis kompleks serta properti.

Jadi misalnya anda harus memiliki:

[Serializable]
public class MyClass
{
    public string MyString {get; set;}

    [Serializable]
    public MyOtherClass MyOtherClassProperty {get; set;}
}
Komentar (0)

Jika objek dapat dimuat ke XML dan dapat digambarkan dalam WSDL maka ya itu adalah mungkin untuk kembali benda-benda dari webservice.

Komentar (0)

Ya: di .NET yang mereka sebut ini serialisasi, di mana benda-benda ini adalah serial ke XML dan kemudian direkonstruksi oleh mengkonsumsi layanan kembali ke aslinya jenis objek atau pengganti dengan struktur data yang sama.

Komentar (0)

Hal ini dimungkinkan untuk kembali benda-benda dari web service menggunakan XML. Tapi Layanan Web yang seharusnya menjadi platform dan sistem operasi yang agnostik. Serialisasi objek hanya memungkinkan anda untuk menyimpan dan mengambil sebuah benda dari aliran byte, seperti file. Misalnya, anda dapat membuat sebuah objek Java, mengkonversi biner stream (mungkin melalui Basis 64 encoding ke CDATA lapangan) dan transfer ke layanan's klien.

Tapi klien hanya akan mampu mengembalikan benda itu jika itu yang berbasis Java. Selain itu, dalam salinan yang diperlukan untuk membuat sebuah objek dan telah dikembalikan persis. Dalam salinan yang dapat menjadi mahal.

Anda rute terbaik adalah untuk menciptakan sebuah skema XML yang merepresentasikan dokumen dan membuat sebuah contoh dari skema itu dengan objek yang spesifik.

Komentar (0)

Mana mungkin, aku merefleksikan benda-benda ke XML - ini berarti bahwa Layanan Web lebih portabel - saya kemudian dapat mengakses layanan dalam bahasa apapun, aku hanya perlu untuk membuat parser/objek transposer dalam bahasa itu.

Karena kita memiliki file WSDL menjelaskan, layanan ini hampir otomatis dalam beberapa sistem.

(Untuk contoh, kita memiliki sebuah server yang ditulis dalam python murni yang mengganti server yang ditulis dalam C, klien yang ditulis dalam C++/gSOAP, dan klien yang ditulis di Cocoa/Objective-C. Kita gunakan soapUI sebagai kerangka pengujian, yang ditulis di Jawa).

Komentar (0)

.NET secara otomatis melakukan hal ini dengan benda-benda yang bersifat serializable. I'm cukup yakin Java bekerja dengan cara yang sama.

Berikut adalah sebuah artikel yang berbicara tentang obyek serialisasi di .NET: http://www.codeguru.com/Csharp/Csharp/cs_syntax/serialization/article.php/c7201

Komentar (0)

@Brian: aku don't tahu bagaimana hal-hal bekerja di Jawa, tapi di .net benda mendapatkan serial turun ke XML, tidak base64 string. Webservice menerbitkan wsdl file yang berisi metode dan objek definisi yang diperlukan untuk webservice.

Saya berharap bahwa tidak ada yang menciptakan web services yang cukup membuat base64 string

Komentar (0)

Daniel Auger: Seperti yang dikatakan orang lain, itu adalah mungkin. Namun, jika kedua layanan dan klien menggunakan sebuah objek yang memiliki yang sama persis domain perilaku pada kedua sisi, anda mungkin tidak't perlu pelayanan di tempat pertama.

lomax: saya harus tidak setuju dengan hal ini karena's agak sempit komentar. Menggunakan webservice yang dapat membuat domain benda-benda ke XML berarti bahwa hal itu membuatnya mudah untuk klien yang bekerja dengan domain yang sama benda-benda, tetapi juga berarti bahwa klien-klien dibatasi untuk menggunakan layanan web tertentu anda've terkena dan juga bekerja di terbalik dengan memungkinkan klien lain untuk tidak memiliki pengetahuan domain anda benda-benda tetapi masih berinteraksi dengan anda layanan melalui XML.

@ Lomax: Anda've dijelaskan dua skenario. Skenario 1: klien adalah rehidrasi pesan xml kembali ke domain yang sama persis objek. Saya menganggap hal ini menjadi "kembali sebuah objek". Dalam pengalaman saya, ini adalah pilihan yang buruk dan I'll jelaskan di bawah ini. Skenario 2: klien rehydrates pesan xml menjadi sesuatu yang lain dari yang sama persis objek domain: saya 100% di belakang ini, namun saya don't mempertimbangkan ini akan kembali domain objek. It's benar-benar mengirim pesan atau DTO.

Sekarang mari saya jelaskan mengapa benar/murni/tidak DTO objek serialisasi di layanan web biasanya ide yang buruk. Sebuah pernyataan: dalam rangka untuk melakukan hal ini di tempat pertama, anda harus menjadi pemilik dari kedua klien dan layanan, atau menyediakan klien dengan perpustakaan menggunakan sehingga mereka dapat minum kembali benda itu ke's true type. Masalah: domain Ini objek sebagai jenis sekarang ada di dan termasuk dua semi-domain terkait. Dari waktu ke waktu, perilaku mungkin perlu ditambahkan dalam satu domain yang tidak masuk akal di domain lain dan ini menyebabkan polusi dan berpotensi masalah yang menyakitkan.

Saya biasanya default untuk skenario 2. Saya hanya menggunakan skenario 1 ketika ada banyak alasan untuk melakukannya.

Saya minta maaf karena begitu singkat dengan awal saya balas. Saya berharap ini akan membersihkan hal-hal ke tingkat sejauh apa pendapat saya. Lomax, tampaknya kita setengah setuju ;).

Komentar (0)

JSON adalah cukup standar untuk lulus benda-benda di sekitar web (sebagai bagian dari javascript). Banyak bahasa memiliki perpustakaan yang akan mengkonversi kode JSON menjadi objek asli seperti misalnya simplejson di Python.

Untuk lebih lanjut perpustakaan untuk JSON menggunakan, lihat JSON web

Komentar (0)

Seperti yang dikatakan orang lain, itu adalah mungkin. Namun, jika kedua layanan dan client menggunakan sebuah objek yang memiliki domain yang sama persis perilaku di kedua sisi, anda mungkin tidak't membutuhkan layanan di tempat pertama.

Komentar (0)

Seperti yang dikatakan orang lain, itu adalah mungkin. Namun, jika kedua layanan dan klien menggunakan sebuah objek yang memiliki yang sama persis domain perilaku pada kedua sisi, anda mungkin tidak't perlu layanan di tempat pertama.

Saya harus tidak setuju dengan hal ini karena's agak sempit komentar. Menggunakan webservice yang dapat membuat domain benda-benda ke XML berarti bahwa hal itu membuatnya mudah bagi klien yang bekerja dengan domain yang sama dengan benda-benda, tetapi juga berarti bahwa klien-klien dibatasi untuk menggunakan layanan web tertentu anda've terkena dan juga bekerja secara terbalik dengan memungkinkan klien lain untuk tidak memiliki pengetahuan domain benda tapi masih berinteraksi dengan layanan anda melalui XML.

Komentar (0)