Cara menggunakan file WSDL untuk membuat layanan WCF (bukan membuat panggilan)

100

Saya memiliki file WSDL lama dan saya ingin membuat server berdasarkan file WSDL ini.

WSDL dihasilkan dari ASMX (saya kira tapi saya tidak yakin).

Bagaimana saya bisa mencapai ini?


pertanyaan awal di mana OP berpikir dia perlu membuat klien berdasarkan WSDL.

Raha
sumber

Jawaban:

112

Dengan menggunakan svcutil, Anda dapat membuat antarmuka dan kelas (kontrak data) dari WSDL.

svcutil your.wsdl (or svcutil your.wsdl /l:vb if you want Visual Basic)

Ini akan membuat file bernama "your.cs" di C # (atau "your.vb" di VB.NET) yang berisi semua item yang diperlukan.

Sekarang, Anda perlu membuat kelas "MyService" yang akan mengimplementasikan antarmuka layanan (IServiceInterface) - atau beberapa antarmuka layanan - dan ini adalah instance server Anda.

Sekarang sebuah kelas dengan sendirinya belum terlalu membantu - Anda harus menghosting layanan di suatu tempat. Anda perlu membuat instance ServiceHost Anda sendiri yang menghosting layanan, mengkonfigurasi endpoint, dan sebagainya - atau Anda dapat menghosting layanan Anda di dalam IIS.

marc_s
sumber
Saya mencoba hal yang sama dengan svcutil, tetapi tidak benar-benar berhasil dengan kesalahan. Apakah Anda mungkin memiliki beberapa saran untuk masalah saya: goo.gl/dlen
Juri
15
"svcutil your.wsdl your.xsd" adalah apa yang saya butuhkan agar milik saya dapat bekerja! Terima kasih!
Tim Lewis
3
Lihat jawaban SO ini untuk info tentang mengunduh wsdl dan xsd dalam format yang disukai svcutil. stackoverflow.com/questions/286657/…
Brett Widmeier
@marc_s Ketika saya menggunakan ini dengan file WSDL saya, tampaknya mengganti nama beberapa elemen dengan cara yang sangat aneh, sehingga permintaan yang masuk ke server saya bahkan tidak akan diterima. Apakah ini normal?
Arj
@Arjun: tidak - sepertinya Anda perlu mengumpulkan semua fakta yang relevan, dan mengajukan pertanyaan di Stackoverflow! :-)
marc_s
41

Ada sumber daya yang bagus di luar sana jika Anda tahu apa yang harus dicari. Coba "Kontrak Pertama" dan WCF. atau "WSDL First" dan WCF.

Ini adalah pilihannya:

Cheeso
sumber
3
Kepada siapa pun yang mengikuti Ikhtisar Dasar WSDL- Artikel pertama : Catat komentar yang berbicara tentang ReplyAction="*". Tampaknya Anda perlu menyingkirkan itu. Ada jejak penjelasan dari komentar itu yang memberi alasan, tapi saya belum membacanya.
dan-gph
30

Gunakan svcutil.exe dengan /scsakelar untuk menghasilkan kontrak WCF. Ini akan membuat file kode yang dapat Anda tambahkan ke proyek Anda. Ini akan berisi semua antarmuka dan tipe data yang Anda butuhkan untuk membuat layanan Anda. Ubah lokasi keluaran menggunakan /osakelar, atau Anda dapat menemukan file di folder tempat Anda menjalankan svcutil.exe. Bahasa default adalah C # tetapi saya pikir (saya belum pernah mencobanya) Anda harus dapat mengubahnya menggunakan /l:vb.

svcutil /sc "WSDL file path"

Jika WSDL Anda memiliki file XSD yang mendukung, teruskan itu sebagai argumen setelah WSDL.

svcutil /sc "WSDL file path" "XSD 1 file path" "XSD 2 file path" ... "XSD n file path"

Kemudian buat kelas baru yang merupakan layanan Anda dan terapkan antarmuka kontrak yang baru saja Anda buat.

Dennis Calla
sumber
7

Anda dapat menggunakan svcutil.exe untuk menghasilkan kode klien. Ini akan mencakup definisi kontrak layanan dan setiap kontrak data dan kontrak kesalahan yang diperlukan.

Kemudian, cukup hapus kode klien: kelas yang menerapkan kontrak layanan. Anda kemudian harus menerapkannya sendiri, dalam layanan Anda.

John Saunders
sumber
4

Menggunakan alat "Tambahkan Referensi Layanan" di Visual Studio, Anda dapat memasukkan alamat sebagai:

file: ///path/to/wsdl/file.wsdl

Dan itu akan dimuat dengan benar.

Vagner Gon
sumber