Tidak dapat menemukan elemen titik akhir default

370

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?

edosoft
sumber
Jika ini berjalan di server web maka Anda perlu menambahkan .svc. Contoh: " 192.168.100.87:7001/soap/IMySOAPWebService.svc
Darren C
Layanan ini bukan layanan .NET, tidak berjalan di server web.
edosoft
Saya memecahkan masalah ini dalam proyek-proyek yang dikembangkan dalam. NET, Tapi saya punya beberapa proyek di VB6 dan saya punya masalah yang sama. Ada Ide?
Gabriel Intriago

Jawaban:

588

"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.

LR
sumber
1
Ini bukan penyebab masalah spesifik saya, tapi saya yakin ini akan membantu orang lain. Terima kasih
edosoft
9
Apakah ada cara untuk menggabungkan keduanya secara otomatis? Bagaimana jika perpustakaan kelas memperbarui konfigurasinya? Apakah Anda hanya terjebak mengingat untuk memperbarui informasi konfigurasi yang disalin di semua proyek yang mereferensikannya? Perbaikan ini tampaknya terlalu bergantung pada kewaspadaan pengembang ...
Sean Hanley
1
Saya mendapatkan kesalahan yang sama untuk aplikasi WP7 (Saya percaya Silverlight) dan butuh waktu terlalu lama untuk memperhatikan bahwa ServiceReferences.ClientConfigdihasilkan dalam direktori proyek. Menyalin <bindings>dan <client>elemen dari file di perpustakaan saya ke aplikasi utama saya (yang sebelumnya kosong) membuat semuanya berfungsi.
David Mason
4
Alasan ini terjadi (seperti yang saya mengerti) adalah bahwa nilai-nilai konfigurasi dibaca dari proyek utama dalam sebuah solusi, baik itu web, winforms, wpf, dll. Katakanlah misalnya Anda memiliki proyek perpustakaan kelas untuk mengakses database, entri connectionString perlu berada dalam konfigurasi proyek utama daripada konfigurasi perpustakaan kelas.
Ciaran Bruen
6
Jadi kita dapat menyimpulkan bahwa, jika kita menggunakan WCF di perpustakaan, akan lebih baik untuk mengatur kode secara langsung seperti tautan stackoverflow.com/questions/7688798/... ditampilkan.
Youngjae
90

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.

var remoteAddress = new System.ServiceModel.EndpointAddress(_webServiceUrl);

using (var productService = new ProductClient(new System.ServiceModel.BasicHttpBinding(), remoteAddress))
{
    //set timeout
    productService.Endpoint.Binding.SendTimeout = new TimeSpan(0,0,0,_webServiceTimeout);

    //call web service method
    productResponse = productService.GetProducts();
} 

Edit

Jika Anda menggunakan https maka Anda perlu menggunakan BasicHttpsBindingdaripada BasicHttpBinding.

Tom Haigh
sumber
1
Ini jawaban yang membantu. Pada layanan web yang saya gunakan, titik akhir kustom harus terikat dalam deklarasi awal objek. Tidak akan berhasil jika saya mencoba melakukannya nanti.
Paul Morel
2
Seperti yang saya duga bahwa jawaban teratas mungkin telah melakukan trik juga, solusi Anda berhasil, dan tampaknya lebih baik bagi saya untuk meretas file konfigurasi saya sendiri.
Sam saya berkata Reinstate Monica
Mempesona! Saya lebih suka mengatur Endpoint dalam kode daripada mendistribusikan file "app.config" dengan aplikasi saya.
Daniel Gee
1
Jika ini merupakan layanan web Https, ingatlah untuk mengubah BasicHttpBinding () menjadi BasicHttpsBinding ()
Anthony
Solusi ini terbaik untuk aplikasi seperti EXCEL-DNA yang tidak memiliki app.config atau web.config.
user781700
75

Setelah menguji beberapa opsi, saya akhirnya menyelesaikan ini dengan menggunakan

contract = "IMySOAPWebService"

yaitu tanpa namespace lengkap dalam konfigurasi. Untuk beberapa alasan nama lengkapnya tidak terselesaikan dengan baik

edosoft
sumber
3
Tampaknya, nama kontrak itu harus ditulis dengan cara yang persis sama dengan klien. Dalam kasus saya, saya berhasil. var proxy = new ExternalServices.ServiceClient("MyServiceEndpoint");Ini berhasil ketika saya menambahkan namespace ke kontrak:contract="ExternalServices.IMyService"
Anatoly Mironov
Ini tidak berhasil untuk saya. Masalah saya mungkin sedikit berbeda. Saya mendapatkan kesalahan ini dari waktu ke waktu tidak selalu. Apa yang mungkin menjadi masalah. Mungkinkah kesalahan ada di sisi layanan? _Terima kasih
albatross
57

Saya memiliki masalah yang sama. Ternyata untuk REFERENSI web, Anda harus menyediakan URL sebagai parameter pertama ke konstruktor:

new WebService.WebServiceSoapClient("http://myservice.com/moo.aspx");

Untuk REFERENSI LAYANAN web gaya baru, Anda harus memberikan nama yang merujuk pada entri titik akhir dalam konfigurasi:

new WebService.WebServiceSoapClient("WebServiceEndpoint");

Dengan entri yang sesuai di Web.configatau App.config:

<client>
      <endpoint address="http://myservice.com/moo.aspx"
        binding="basicHttpBinding" 
        bindingConfiguration="WebService"
        contract="WebService.WebServiceSoap"
        name="WebServiceEndpoint" />
    </client>
  </system.serviceModel>

Sangat sulit untuk menghapus visi terowongan pada "itu bekerja di program yang lebih lama" ...

Andomar
sumber
3
Ah ha! Ini memperbaikinya bagi saya, saya hanya menggunakan konstruktor kosong sebelumnya, yang terus gagal: WebService.WebServiceSoapClient () baru; // gagal
travis
Solutin ini berhasil !!! tetapi, saya benar-benar ingin tahu mengapa titik akhir default tidak dimuat? ada ide untuk apa alasannya?
Dipti Mehta
@Andomar menyesal memunculkan utas lama. Apakah ada yang memiliki keunggulan dibandingkan yang lain - WebReference dan ServiceReference? Saya pikir yang pertama akan lebih nyaman bagi saya tetapi ServiceReference adalah hal baru yang keren saya kira ...
Kev
17

Saya punya situasi seperti ini, di mana saya punya

  • Layanan WCF Diinangi di suatu tempat
  • Proyek Utama
  • Proyek Konsumen tipe 'Perpustakaan kelas' yang memiliki referensi Layanan ke Layanan WCF
  • Proyek utama memanggil metode dari proyek konsumen

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.

Bravo
sumber
1
Sama. Cari <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 ??
SteveCinq
15

"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 itu adalah winapp atau web.config jika itu adalah aplikasi web. Ini adalah cara untuk pergi bahkan dengan PRISM dan WPF / Silverlight."

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:

public static class ServiceClientHelper
{
    public static T GetClient<T>(string moduleName) where T : IClientChannel
    {
        var channelType = typeof(T);
        var contractType = channelType.GetInterfaces().First(i => i.Namespace == channelType.Namespace);
        var contractAttribute = contractType.GetCustomAttributes(typeof(ServiceContractAttribute), false).First() as ServiceContractAttribute;

        if (contractAttribute == null)
            throw new Exception("contractAttribute not configured");

        //path to your lib app.config (mark as "Copy Always" in properties)
        var configPath = HostingEnvironment.MapPath(String.Format("~/Modules/{0}/bin/{0}.dll.config", moduleName)); 

        var configuration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = configPath }, ConfigurationUserLevel.None);
        var serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);

        if (serviceModelSectionGroup == null)
            throw new Exception("serviceModelSectionGroup not configured");

        var endpoint = serviceModelSectionGroup.Client.Endpoints.OfType<ChannelEndpointElement>().First(e => e.Contract == contractAttribute.ConfigurationName);
        var channelFactory = new ConfigurationChannelFactory<T>(endpoint.Name, configuration, null);
        var client = channelFactory.CreateChannel();
        return client;
    }
}

dan gunakan:

using (var client = ServiceClientHelper.GetClient<IDefaultNameServiceChannel>(yourLibName)) {
                ... get data from service ...
            }

Lihat detail di artikel ini .

melva
sumber
15

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 :

  <system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_ITranslationServiceOutbound" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://MyHostName/TranslationServiceOutbound/TranslationServiceOutbound.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITranslationServiceOutbound"
    contract="TranslationService.ITranslationServiceOutbound" name="BasicHttpBinding_ITranslationServiceOutbound" />
</client>

markaaronky
sumber
14

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:

Tidak dapat menemukan elemen titik akhir default yang merujuk kontrak 'IMyService' di bagian konfigurasi klien model layanan. 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

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:

MyServiceClient myService = new MyServiceClient();
Jeff Moeller
sumber
11

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.

zanderwel
sumber
Sementara jawaban lain mungkin sudah menggambarkan masalah yang sama. Jawaban ini menggambarkan situasi saya yang sebenarnya dan saya akhirnya memahami masalahnya. Terima kasih karena telah menyelamatkan hariku
Wouter Vanherck
10

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 ServiceReferencedi bawah).

misalnya:

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ServiceReference.ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />

bukannya default yang dihasilkan:

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />
Matt Mitchell
sumber
1
Saya harus melakukan hal yang sama. Saya benar-benar tidak mengerti mengapa.
Brigjen
8

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.

Cyril Gupta
sumber
2
Inilah yang akhirnya saya lakukan juga. Saya berharap masalah ini masuk akal bagi saya.
Jarrett Widman
Ini berhasil juga untuk saya. Sekarang saya memiliki semua sampah tambahan ini di solusi saya (Pengaturan. Pengaturan, folder Referensi Web baru) tanpa alasan yang bagus. Harus kembali dan mengunjungi ini ketika saya punya lebih banyak waktu.
Mike K
Sepakat. Saya memiliki masalah yang sama, dan memperbaikinya dengan mengubahnya ke referensi web.
Stephen Hosking
7

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.

PatrickV
sumber
7

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
2
Saya tidak menyalin app.config lengkap, tetapi system.serviceModelbagian. Itu saja!
kwrl
Sama, kecuali saya menyalin system.serviceModelke app.config aplikasi konsol
AlbatrossCafe
5

Saya 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.

vardar
sumber
4

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.

Chris Porter
sumber
3

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.

Salam mohhammad ahmad
sumber
3

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".

Joey
sumber
3

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!

Mücahid Uslu
sumber
3

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.)

VRK
sumber
2

Kesalahan ini dapat muncul jika Anda memanggil layanan di perpustakaan kelas dan memanggil perpustakaan kelas dari proyek lain.

Manuel Alves
sumber
2

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.

TPaul
sumber
2

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.

Itay Levin
sumber
2

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

Roshan
sumber
2

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

Kamran Akhter
sumber
2

Solusi bagi saya adalah menghapus nama titik akhir dari atribut Nama Titik Akhir di klien web.config ini memungkinkan proxy untuk menggunakan

ChannelFactory<TService> _channelFactory = new ChannelFactory<TService>("");

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

rampok
sumber
2

Izinkan saya menambahkan satu hal lagi untuk dicari. ( Jawaban Tom Haigh sudah menyinggung itu, tapi saya ingin menjadi eksplisit)

web.configFile saya didefinisikan sebagai berikut:

<protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

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 protocolMappingsebagai berikut:

<protocolMapping>
    <add binding="basicHttpBinding" scheme="http" />
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

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.

David
sumber
2

Saya memiliki kesalahan ini ketika saya merujuk Kontrak dalam elemen file konfigurasi tanpa operator lingkup global.

yaitu

<endpoint contract="global::MyNamepsace.IMyContract" .../>

bekerja, tapi

<endpoint contract="MyNamepsace.IMyContract" .../>

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.

berlayar
sumber
2

Ketika Anda menambahkan referensi layanan

masukkan deskripsi gambar di sini

Waspadalah terhadap namespace yang Anda ketikkan:

masukkan deskripsi gambar di sini

Anda harus menambahkannya ke nama antarmuka Anda:

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" 
            contract="MyNamespace.IMySOAPWebService" />
</client>
Waldemar Gałęzinowski
sumber
2

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

<client>
    <endpoint address="https://xxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference.IIntegrationService" name="basic" />
</client>

Proyek B:

<client>
    <endpoint address="xxxxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference1.IIntegrationService" name="basic" />
</client>

Akhirnya saya berubah untuk keduanya sebagai:

<client>
    <endpoint address="https://xxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="MyServiceReferrence.IIntegrationService" name="basic" />
</client>
nzrytmn
sumber
1

Saya memiliki masalah yang sama dan diselesaikan hanya ketika aplikasi host dan dll yang menggunakan titik akhir itu memiliki nama referensi layanan yang sama.

perak
sumber