Saya telah menambahkan proxy ke layanan web ke solusi VS2008 / .NET 3.5. Saat membangun klien .NET melempar kesalahan ini:
Tidak dapat menemukan elemen titik akhir default yang merujuk kontrak 'IMySOAPWebService' di bagian konfigurasi klien ServiceModel. Ini mungkin karena tidak ada file konfiguasi yang ditemukan untuk aplikasi Anda atau karena tidak ada elemen titik akhir yang cocok dengan kontrak ini yang dapat ditemukan di elemen klien.
Mencari kesalahan ini memberi tahu saya untuk menggunakan namespace lengkap dalam kontrak. Inilah app.config saya dengan namespace lengkap:
<client>
<endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
binding="basicHttpBinding" bindingConfiguration="IMySOAPWebServicebinding"
contract="Fusion.DataExchange.Workflows.IMySOAPWebService" name="IMySOAPWebServicePort" />
</client>
Saya menjalankan XP local (saya menyebutkan ini karena sejumlah hit Google menyebutkan win2k3) App.config disalin ke app.exe.config, jadi itu juga bukan masalahnya.
Ada petunjuk?
sumber
Jawaban:
"Kesalahan ini dapat muncul jika Anda memanggil layanan di perpustakaan kelas dan memanggil perpustakaan kelas dari proyek lain."
Dalam hal ini Anda harus memasukkan pengaturan konfigurasi WS ke dalam proyek-proyek utama app.config jika winapp atau web.config jika ini merupakan aplikasi web. Ini adalah cara untuk pergi bahkan dengan PRISM dan WPF / Silverlight.
sumber
ServiceReferences.ClientConfig
dihasilkan dalam direktori proyek. Menyalin<bindings>
dan<client>
elemen dari file di perpustakaan saya ke aplikasi utama saya (yang sebelumnya kosong) membuat semuanya berfungsi.Saya memecahkan ini (saya pikir seperti yang orang lain mungkin sarankan) dengan membuat contoh alamat pengikatan dan titik akhir - karena saya tidak ingin menambahkan pengaturan baru ke file konfigurasi (ini adalah pengganti untuk beberapa kode perpustakaan yang ada yang digunakan secara luas, dan sebelumnya menggunakan Referensi Layanan Web yang lebih lama, dll.), dan jadi saya ingin dapat memasukkan ini tanpa harus menambahkan pengaturan konfigurasi baru di mana-mana.
Edit
Jika Anda menggunakan https maka Anda perlu menggunakan
BasicHttpsBinding
daripadaBasicHttpBinding
.sumber
Setelah menguji beberapa opsi, saya akhirnya menyelesaikan ini dengan menggunakan
yaitu tanpa namespace lengkap dalam konfigurasi. Untuk beberapa alasan nama lengkapnya tidak terselesaikan dengan baik
sumber
var proxy = new ExternalServices.ServiceClient("MyServiceEndpoint");
Ini berhasil ketika saya menambahkan namespace ke kontrak:contract="ExternalServices.IMyService"
Saya memiliki masalah yang sama. Ternyata untuk REFERENSI web, Anda harus menyediakan URL sebagai parameter pertama ke konstruktor:
Untuk REFERENSI LAYANAN web gaya baru, Anda harus memberikan nama yang merujuk pada entri titik akhir dalam konfigurasi:
Dengan entri yang sesuai di
Web.config
atauApp.config
:Sangat sulit untuk menghapus visi terowongan pada "itu bekerja di program yang lebih lama" ...
sumber
Saya punya situasi seperti ini, di mana saya punya
Sekarang proyek Consumer memiliki semua pengaturan konfigurasi yang terkait di
<system.serviceModel>
Tag app.config saya, masih ada kesalahan yang sama seperti di atas.Yang saya lakukan adalah menambahkan tag yang sama
<system.serviceModel>
ke file app.config proyek utama saya, dan akhirnya kami bisa melanjutkan.Masalah sebenarnya, sejauh dalam kasus saya, itu membaca file konfigurasi yang salah. Alih-alih app.config konsumen, itu merujuk konfigurasi proj utama. saya butuh dua jam untuk mencari tahu.
sumber
<system.serviceModel>
di perpustakaan Anda, lalu salin ke app.config aplikasi utama Anda. Hanya gejala lain dari app perpustakaan kelas. Config tidak dibaca pada saat dijalankan. Saya menghabiskan begitu banyak waktu mengkompensasi kelalaian ini (imo). Jika saya ingin perpustakaan membaca konfigurasi dari app.config, biarkan. Jika tidak, mengapa memiliki app.config untuk pustaka kelas di tempat pertama ??Ya, tetapi jika Anda tidak dapat mengubah proyek utama (CMS Orchard misalnya), Anda dapat menyimpan konfigurasi layanan WCF di proyek Anda.
Anda perlu membuat pembantu layanan dengan metode pembuatan klien:
dan gunakan:
Lihat detail di artikel ini .
sumber
Beberapa tanggapan di sini menemukan solusi yang tepat ketika Anda menghadapi kesalahan yang mengaburkan dari merujuk layanan dari file kelas: menyalin informasi konfigurasi layanan ke app.config web.config aplikasi konsol atau windows Anda. Namun, tidak satu pun dari jawaban itu yang menunjukkan kepada Anda apa yang harus Anda salin. Mari kita coba dan perbaiki itu.
Inilah yang saya salin dari file konfigurasi perpustakaan kelas saya, ke file konfigurasi aplikasi konsol saya, untuk mengatasi kesalahan gila ini untuk layanan yang saya tulis disebut "TranslationServiceOutbound".
Anda pada dasarnya menginginkan semuanya di dalam bagian system.serviceModel :
sumber
Yang ini membuatku gila.
Saya menggunakan Silverlight 3 Prism (CAB) dengan WCF
Ketika saya memanggil layanan WCF dalam modul Prism, saya mendapatkan kesalahan yang sama:
Ternyata itu mencari dalam file .xap Shell untuk file ServiceReferences.ClientConfig, bukan dalam file ServiceReferences.ClientConfig modul. Saya menambahkan titik akhir saya dan mengikat ke file ServiceReferences.ClientConfig yang ada di aplikasi Silverlight Shell saya (ia menyebut itu layanan WCF sendiri).
Kemudian saya harus membangun kembali aplikasi Shell untuk menghasilkan file .xap baru untuk folder ClientBin proyek Web saya.
Sekarang baris kode ini akhirnya berfungsi:
sumber
Saya mendapatkan kesalahan ini dalam aplikasi ASP.NET di mana layanan WCF telah ditambahkan ke perpustakaan kelas yang sedang ditambahkan ke aplikasi ASP.NET sebagai file .dll direferensikan dalam folder bin. Untuk mengatasi kesalahan, pengaturan konfigurasi dalam file app.config dalam perpustakaan kelas referensi layanan WCF perlu disalin ke pengaturan web.config untuk situs / aplikasi ASP.NET.
sumber
Saya menemukan (juga menyalin ke App.config UI klien saat saya menggunakan antarmuka Perpustakaan Kelas) saya harus awalan nama pengikatan dengan nama Referensi Layanan (milik saya ada
ServiceReference
di bawah).misalnya:
bukannya default yang dihasilkan:
sumber
Saya memiliki masalah yang sama, tetapi mengubah namespace kontrak tidak berhasil untuk saya. Jadi saya mencoba referensi web .Net 2 style alih-alih referensi layanan .Net 3.5. Itu berhasil.
Untuk menggunakan referensi Web dalam Visual Studio 2008, klik pada 'Tambahkan Referensi Layanan', lalu klik 'Tingkat Lanjut' ketika kotak dialog muncul. Dalam hal itu Anda akan menemukan opsi yang akan memungkinkan Anda menggunakan referensi Web alih-alih referensi Layanan.
sumber
Unit menguji aplikasi non-perpustakaan yang mengkonsumsi layanan dapat menyebabkan masalah ini.
Informasi yang telah dimasukkan orang lain mengatasi penyebab utama ini. Jika Anda mencoba menulis kotak uji otomatis dan unit yang Anda uji akan benar-benar memanggil antarmuka layanan, Anda perlu menambahkan referensi layanan ke proyek uji. Ini adalah rasa aplikasi menggunakan jenis kesalahan perpustakaan. Saya tidak segera menyadari hal ini karena kode saya yang mengkonsumsi antarmuka tidak ada di perpustakaan . Namun, ketika tes benar-benar berjalan itu akan berjalan dari rakitan uji, bukan rakitan yang diuji.
Menambahkan referensi layanan ke proyek unit test menyelesaikan masalah saya.
sumber
Saya memiliki situasi yang dalam tes Unit. Saya menyalin file app.config ke proyek unit test. Jadi proyek unit test juga mengandung informasi titik akhir.
sumber
system.serviceModel
bagian. Itu saja!system.serviceModel
ke app.config aplikasi konsolSaya menghadapi masalah ini sekali. Itu karena saya masih mengembangkan antarmuka yang menggunakan layanan WCF. Saya mengkonfigurasi aplikasi pengujian dan pengembangan lanjutan. Kemudian dalam pengembangan, saya mengubah beberapa ruang nama layanan. Jadi saya mengecek "system.serviceModel -> client -> endpoint -> contract" di web.config agar sesuai dengan kelas WCF. Kemudian masalah terpecahkan.
sumber
Namespace di config Anda harus mencerminkan sisa dari namespace path setelah namespace default klien Anda (sebagaimana dikonfigurasi dalam properti proyek). Berdasarkan jawaban yang Anda posting, dugaan saya adalah bahwa klien Anda dikonfigurasi untuk berada di namespace "Fusion.DataExchange.Workflows". Jika Anda memindahkan kode klien ke namespace lain, Anda perlu memperbarui konfigurasi agar sesuai dengan path namespace yang tersisa.
sumber
Saya Memiliki Masalah yang Sama. Saya Menggunakan Layanan WCF di perpustakaan kelas dan memanggil perpustakaan kelas dari proyek Aplikasi windows.tapi saya Lupa Perubahan
<system.serviceModel>
Dalam File Konfigurasi aplikasi windows Proyek sama dengan aplikasi<system.serviceModel>
Class.Config file Library Library.solusi: ubah Konfigurasi proyek luar sama dengan konfigurasi wcf perpustakaan kelas.
sumber
Hai Saya telah mengalami masalah yang sama tetapi solusi terbaik adalah membiarkan .NET untuk mengkonfigurasi konfigurasi sisi klien Anda. Apa yang saya temukan adalah ini ketika saya menambahkan referensi layanan dengan string kueri http: /namespace/service.svc? Wsdl = wsdl0 TIDAK membuat endpoint konfigurasi di sisi klien. Tetapi ketika saya menghapus? Wsdl-wsdl0 dan hanya menggunakan url http: /namespace/service.svc, itu membuat konfigurasi titik akhir pada file konfigurasi klien. untuk remoe pendek "? WSDL = WSDL0".
sumber
Jangan meletakkan baris deklarasi klien layanan sebagai bidang kelas, alih-alih ini, buat contoh di setiap metode yang digunakan masuk. Jadi masalah akan diperbaiki. Jika Anda membuat instance klien layanan sebagai bidang kelas, maka kesalahan waktu desain terjadi!
sumber
Dalam hal jika Anda menggunakan aplikasi WPF menggunakan kerangka PRISM maka konfigurasi harus ada di proyek start up Anda (yaitu dalam proyek di mana bootstrapper Anda berada.)
sumber
Kesalahan ini dapat muncul jika Anda memanggil layanan di perpustakaan kelas dan memanggil perpustakaan kelas dari proyek lain.
sumber
Tampaknya ada beberapa cara untuk membuat / memperbaiki masalah ini. Bagi saya, produk CRM yang saya gunakan ditulis dalam kode asli dan dapat memanggil .NET dll, tetapi saya mengalami informasi konfigurasi yang perlu berada di / di atas aplikasi utama. Bagi saya, aplikasi CRM bukan .NET, jadi saya akhirnya harus meletakkannya di file machine.config saya (bukan tempat yang saya inginkan). Selain itu, karena perusahaan saya menggunakan Websense, saya mengalami kesulitan bahkan menambahkan Referensi Layanan karena masalah Diperlukan Otentikasi Proxy 407, sehingga diperlukan modifikasi pada machine.cong.
Solusi proxy:
Untuk mendapatkan Referensi Layanan WCF agar berfungsi, saya harus menyalin informasi dari app.config dari DLL saya ke konfigurasi aplikasi utama (tetapi bagi saya itu adalah machine.config). Dan saya juga harus menyalin informasi titik akhir ke file yang sama. Setelah saya lakukan itu mulai bekerja untuk saya.
sumber
Baik. Kasus saya sedikit berbeda tetapi akhirnya saya menemukan perbaikan untuk itu: Saya memiliki Console.EXE -> DLL -> Invoking WS1 -> DLL -> Invoking WS2
Saya telah memiliki kedua konfigurasi model layanan WS1, dan WS2 di Console.EXE.config seperti yang disarankan. - tidak menyelesaikan masalah.
Tapi itu masih tidak berhasil, sampai saya telah menambahkan WebReference WS2 ke WS1 juga dan tidak hanya ke DLL yang benar-benar membuat dan memohon proksi WS2.
sumber
Jika Anda merujuk layanan web di perpustakaan kelas Anda, maka Anda harus menyalin app.config ke aplikasi windows atau aplikasi konsol
solusi: ubah Konfigurasi proyek luar sama dengan konfigurasi wcf perpustakaan kelas.
Bekerja untukku
sumber
Saya memiliki Masalah yang sama dengan yang
saya gunakan di aplikasi desktop dan menggunakan layanan Web Cuaca Global
Saya menghapus referensi layanan dan menambahkan referensi web dan masalah diselesaikan Terima kasih
sumber
Solusi bagi saya adalah menghapus nama titik akhir dari atribut Nama Titik Akhir di klien web.config ini memungkinkan proxy untuk menggunakan
hanya butuh sepanjang hari untuk berolahraga. Juga nama kontrak salah ketika perbaikan ini dilakukan meskipun salah ketika kesalahan awal muncul. Periksa dua kali lipat untuk nama kontrak orang !! attrib: Ian
sumber
Izinkan saya menambahkan satu hal lagi untuk dicari. ( Jawaban Tom Haigh sudah menyinggung itu, tapi saya ingin menjadi eksplisit)
web.config
File saya didefinisikan sebagai berikut:Saya sudah menggunakan basicHttpsBinding untuk satu referensi, tetapi kemudian saya menambahkan referensi baru yang membutuhkan basicHttpBinding (no s). Yang harus saya lakukan adalah menambahkan itu ke saya
protocolMapping
sebagai berikut:Seperti yang ditunjukkan LR dengan benar, ini perlu didefinisikan di tempat yang tepat. Bagi saya, itu berarti satu di app.config proyek Uji unit saya serta satu di web.config proyek layanan utama.
sumber
Saya memiliki kesalahan ini ketika saya merujuk Kontrak dalam elemen file konfigurasi tanpa operator lingkup global.
yaitu
bekerja, tapi
memberikan kesalahan "Tidak dapat menemukan elemen titik akhir default yang merujuk kontrak".
Perakitan yang mengandung MyNamepsace.IMyContract berada dalam majelis berbeda dengan aplikasi utama, jadi ini mungkin menjelaskan kebutuhan untuk menggunakan resolusi lingkup global.
sumber
Ketika Anda menambahkan referensi layanan
Waspadalah terhadap namespace yang Anda ketikkan:
Anda harus menambahkannya ke nama antarmuka Anda:
sumber
Saya mendapat kesalahan yang sama dan saya telah mencoba banyak hal tetapi tidak berhasil, daripada saya perhatikan bahwa "kontrak" saya tidak sama di semua proyek, saya mengubah kontrak karena akan sama untuk semua proyek di dalam solusi dan daripada berhasil. Ini adalah proyek A
Proyek B:
Akhirnya saya berubah untuk keduanya sebagai:
sumber
Saya memiliki masalah yang sama dan diselesaikan hanya ketika aplikasi host dan dll yang menggunakan titik akhir itu memiliki nama referensi layanan yang sama.
sumber