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
sumber
Klik kanan pada referensi layanan Anda dan pilih
Configure Service Reference...
Kemudian hapus centang
Reuse types in referenced assemblies
Klik
OK
, bersihkan dan bangun kembali solusi Anda.sumber
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.
sumber
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.
sumber
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.
sumber
Saya mendapatkan kesalahan yang sama di Silverlight 5 (VS2012)
Anda juga dapat menghapus referensi ke:
Setelah Anda memperbarui referensi layanan, pastikan untuk menambahkannya kembali.
sumber
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.
sumber
menghadapi masalah yang sama, diselesaikan dengan menjalankan Visual Studio dalam mode Admin
sumber
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.
sumber
"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.
sumber
Jika Anda ingin memperbaiki ini tanpa menghapus centang pada kotak centang penggunaan kembali majelis inilah yang bekerja untuk saya:
sumber
Mulai ulang Visual Studio membantu saya. Saya menggunakan VS 2015.
sumber
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:
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.
sumber