Kesalahan Referensi Layanan: Gagal menghasilkan kode untuk referensi layanan

131

Saya memiliki Solusi Layanan Windows dan saya mencoba untuk menambahkan referensi layanan ke Hermes (server pesan opensource ebms) Layanan Web di VS2010.

Saya dapat menemukan Layanan Web menggunakan URL itu, tetapi ketika saya mencoba dan mengisi referensi Layanan saya mendapatkan kesalahan berikut di Visual Studio:

Error 8 Custom tool error: Failed to generate code for the service reference 'testService'.  Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler


Warning 6 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Beberapa penyelidikan tampaknya menyarankan itu karena svcutil.exe tidak dapat membangun proksi karena tidak memiliki izin ke direktori (mungkin c: \ windows \ temp). Saya telah mencoba menetapkan berbagai izin akses, tetapi saya tidak benar-benar yakin pengguna mana yang memerlukan izin, atau jika itu hanya herring merah.

Setiap ide akan sangat dihargai.

Terima kasih

jheppinstall
sumber

Jawaban:

303

Harus menghapus centang pada jenis Penggunaan Kembali di semua rujukan yang direferensikan dari Konfigurasi opsi referensi layanan

Periksa ini untuk detailnya

Mohan
sumber
3
Atau, ketika "Gunakan kembali jenis dalam rujukan yang direferensikan" sebenarnya diperlukan, Anda dapat menambahkan referensi layanan dari proyek Perpustakaan Kelas yang khusus dibuat untuk tujuan itu. Periksa balasan saya untuk info tambahan.
Florin Dumitrescu
Saya menginginkan solusi tanpa menghapus "jenis penggunaan kembali", dan saya berhasil menemukan satu yang berfungsi, lihat jawaban saya di sini .
Shahin Dohan
Alih-alih melakukan sesuatu seperti ini, gunakan rakitan yang bergantung pada klien WCF alih-alih menggunakan semua yang direferensikan secara membabi buta, Ini bisa rumit dan lebih memakan waktu daripada menghapus centang pada kotak centang yang dimaksud, tapi saya menemukan solusi ini lebih cocok daripada yang ditandai sebagai jawaban.
Oscar Guillamon
Juga pastikan Proyek Anda tidak Hanya Baca .. Ini masalah saya ..
arihanth jain
126

Klik kanan pada referensi layanan Anda dan pilih Configure Service Reference...

Konfigurasikan Referensi Layanan

Kemudian hapus centang Reuse types in referenced assemblies

Jenis Penggunaan Kembali

Klik OK, bersihkan dan bangun kembali solusi Anda.

Darren
sumber
2
Bagaimana jika saya perlu menggunakan kembali rakitan yang direferensikan? Saya punya proyek dan kotak centang itu dicentang. Pembaruan berfungsi di mesin saya, tetapi pada komputer teman kerja itu tidak ... ada petunjuk?
Ricardo Appleton
Ini terjadi ketika saya memutakhirkan dari v4.6.1 ke v4.7 dengan proyek saya. Ini memperbaikinya.
Mike Flynn
17

Saya juga mengalami kesalahan serupa ketika mencoba untuk menghasilkan klien untuk layanan web dari proyek ASP .Net MVC 4.0 menggunakan Visual Studio 2012.

Akar masalahnya tampaknya adalah fakta bahwa proyek tempat saya mencoba menghasilkan klien mereferensikan sebuah majelis yang pada gilirannya bergantung pada majelis lain yang tidak dirujuk juga.

Ketika "Gunakan kembali jenis dalam rujukan yang direferensikan" diaktifkan dalam konfigurasi layanan, generator layanan mungkin sedang memeriksa semua rakitan yang direferensikan untuk mendapatkan daftar jenis yang dapat digunakan kembali. Fakta bahwa salah satu rakitan yang direferensikan mereferensikan rakitan lain yang tidak tersedia kemungkinan menyebabkan generator gagal.

Hapus centang "Gunakan kembali jenis dalam rujukan yang direferensikan" dari konfigurasi layanan akan menyelesaikan masalah di atas , tetapi ada efek sampingnya. Opsi jenis penggunaan kembali ada karena suatu alasan dan dalam beberapa kasus menghindari penggunaan yang tidak perlu dalam kode yang menggunakan layanan.

Misalnya, jika layanan itu sendiri dibangun menggunakan WCF dan beberapa parameter metode di dalamnya adalah tipe System.Guid, mereka akan diterjemahkan ke string di klien yang dihasilkan jika opsi jenis penggunaan kembali dinonaktifkan.

Alternatif yang saya sukai untuk menonaktifkan tipe reusing adalah menambahkan referensi layanan dari proyek Class Library yang khusus dibuat untuk tujuan itu. Satu hal yang perlu diingat adalah menyalin semua konfigurasi terkait layanan dari app library.config ke file konfigurasi proyek startup.

Jika ada jenis yang didefinisikan dalam majelis lokal yang perlu digunakan kembali di klien layanan, majelis tersebut hanya perlu dirujuk dari proyek perpustakaan kelas yang disebutkan di atas, bersama dengan semua dependensinya.

Florin Dumitrescu
sumber
Aneh. Saya mengubah pengikatan dari HttpBinding ke NetNamedPipeBinding (juga menambahkan titik akhir mex) dan memasukkan ini dalam perakitan klien saya A. Saya membuat kelas B libary baru yang merujuk layanan WCF saya. Lalu saya menambahkan B sebagai referensi ke A dan secara ajaib semuanya bekerja lagi. Sangat aneh. Terima kasih atas solusinya
citronas
3

http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647

Berkat artikel di atas.

Dalam kasus saya, saya memiliki masalah dengan proyek WPF saya di VS.Net 2008. Setelah membaca artikel ini, saya menyadari bahwa perakitan yang digunakan dalam layanan web adalah versi perakitan yang berbeda yang digunakan pada klien.

Ini berfungsi dengan baik setelah memperbarui perakitan pada klien.

pengguna2144589
sumber
1

Akan sangat sulit untuk menebak masalahnya karena ini disebabkan oleh kesalahan dalam WSDL dan tanpa memeriksa WSDL, saya tidak dapat berkomentar lebih banyak. Jadi, jika Anda dapat membagikan WSDL Anda, silakan lakukan.

Yang bisa saya katakan adalah bahwa sepertinya ada skema yang hilang di WSDL (dengan target namespace 'http://service.ebms.edi.cecid.hku.hk/'). Saya tahu tentang masalah dan penanganan skema yang berbeda saat memasukkan instruksi diabaikan.

Secara umum saya telah menemukan implementasi layanan web Microsoft cukup bagus jadi saya pikir layanan web mengirim kembali WSDL cerdik.

Aliostad
sumber
Terima kasih Aliostad, saya akan mencoba dan membagikan WSDL ketika saya pulang kerja.
jheppinstall
0

Saya mendapatkan kesalahan yang sama di Silverlight 5 (VS2012)

Anda juga dapat menghapus referensi ke:

  • System.ServiceModel.DomainServices.Client
  • System.ServiceModel.DomainServices.Client.Web

Setelah Anda memperbarui referensi layanan, pastikan untuk menambahkannya kembali.

CartoJunkie
sumber
0

Seperti yang dinyatakan di atas, ada beberapa masalah berbeda yang mungkin terjadi. Apa yang kami temukan adalah .DLL untuk perpustakaan WCF telah ditambahkan sebagai referensi ke proyek klien. Ini, pada gilirannya, menciptakan masalah dengan menyelesaikan objek dan dengan demikian menyebabkan file menjadi "dikosongkan" oleh langkah-langkah pembuatan kode. Sementara menghapus centang penggunaan "Jenis Penggunaan Kembali ..." bisa tampak seperti jawaban, itu menciptakan definisi ekstra dari jenis objek, yang merupakan proksi ke tipe nyata, dalam ruang nama baru, yang kemudian menyebabkan semua jenis masalah "kompatibilitas" dengan penggunaan tipe-tipe itu. Hanya jika Anda benar-benar ingin "menyembunyikan" suatu tipe, Anda harus memeriksa opsi ini.

Menyembunyikan tipe akan sesuai ketika Anda tidak ingin ketergantungan tipe "DLL" untuk "bocor" ke dalam proyek yang Anda coba untuk tetap terpisah dari yang lain. Jika DLL untuk proyek perpustakaan WCF masuk ke referensi proyek klien, maka Anda akan memiliki masalah ini dengan semua jenis efek samping yang aneh karena definisi jenis juga di DLL.

Grwon
sumber
0

menghadapi masalah yang sama, diselesaikan dengan menjalankan Visual Studio dalam mode Admin

Prashant
sumber
0

Saya mengalami masalah ini ketika memutakhirkan solusi VS2010 WCF + Silverlight di VS2015 Professional . Selain memutakhirkan secara otomatis dari Silverlight 4 ke Silverlight 5, nilai kotak centang penggunaan kembali referensi layanan diubah dan pembangkitan gagal.

Alexei
sumber
0

"Penggunaan kembali jenis" tidak selalu menjadi masalah saat kesalahan ini terjadi.

Saat menambahkan referensi ke layanan yang lebih lama, klik 'lanjut' dan di sana 'Tambahkan Referensi Web'. Sekarang tautan ke wsdl Anda dan semuanya harusnya berfungsi.

FrankyHollywood
sumber
0

Jika Anda ingin memperbaiki ini tanpa menghapus centang pada kotak centang penggunaan kembali majelis inilah yang bekerja untuk saya:

  • Hapus rakitan referensi yang ingin Anda gunakan kembali
  • Hapus semua folder bin proyek
  • Perbarui referensi layanan
    • Tetap "Gunakan kembali jenis dalam majelis referensi yang ditentukan"
  • Tambahkan referensi ke perakitan lagi untuk memperbaiki kesalahan
  • Perbarui referensi layanan lagi
popiandro
sumber
0

Mulai ulang Visual Studio membantu saya. Saya menggunakan VS 2015.

CodingYoshi
sumber
-1

Saya mengalami masalah ini ketika mencoba memperbarui referensi layanan saya (Kesalahan hanya muncul ketika menambahkan referensi layanan) tetapi tidak ingin menghapus kotak centang penggunaan kembali perakitan.

Apa yang berhasil bagi saya adalah sebagai berikut:

  • Hapus rakitan referensi yang ingin saya gunakan kembali
  • Perbarui referensi layanan
  • Tetap "Gunakan kembali jenis dalam majelis referensi yang ditentukan"
  • Abaikan kesalahan, itu karena referensi tidak ada!
  • Tambahkan referensi ke perakitan lagi untuk memperbaiki kesalahan
  • Perbarui referensi layanan lagi

Voila, sekarang benar-benar pembaruan dan tidak mencoba untuk menghapus semua kode saya yang dihasilkan lagi.

Saya hampir siap untuk menyerah pada fitur jenis penggunaan ulang ...

Sunting: Juga pastikan bahwa build config adalah AnyCPU atau x86, karena svcutil bermasalah dengan x64.

Kepada para downvoter: Maaf jika itu tidak berhasil untuk Anda, saya bahkan tidak tahu mengapa itu berhasil untuk saya, tetapi itu berhasil. Saya mungkin telah melakukan hal lain saat itu yang memperbaiki masalah, tetapi tidak ada cara untuk mengetahuinya sekarang.

Shahin Dohan
sumber