Kesalahan WCF - Tidak dapat menemukan elemen titik akhir default yang mereferensikan kontrak 'UserService.UserService'

98

Ada ide bagaimana cara memperbaikinya?

UserService.UserServiceClient userServiceClient = new UserServiceClient();
            userServiceClient.GetUsersCompleted += new EventHandler<GetUsersCompletedEventArgs>(userServiceClient_GetUsersCompleted);
            userServiceClient.GetUsersAsync(searchString);

.

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_UserService" 
                     maxBufferSize="2147483647" 
                     maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:52185/UserService.svc" 
                  binding="basicHttpBinding" 
                  bindingConfiguration="BasicHttpBinding_UserService" 
                  contract="UserService.UserService"
                  name="BasicHttpBinding_UserService" />
    </client>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Shell.Silverlight.Web.Service3Behavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service behaviorConfiguration="Shell.Silverlight.Web.Service3Behavior" 
                 name="Shell.Silverlight.Web.Service3">
            <endpoint address="" 
                      binding="basicHttpBinding" 
                      contract="Shell.Silverlight.Web.Service3" />
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

Tidak dapat menemukan elemen titik akhir default yang mereferensikan kontrak 'UserService.UserService' di bagian konfigurasi klien ServiceModel. Ini mungkin karena tidak ada file konfigurasi yang ditemukan untuk aplikasi Anda, atau karena tidak ada elemen endpoint yang cocok dengan kontrak ini yang dapat ditemukan di elemen klien.

Terselesaikan!

Saya tidak menyebutkan bahwa ini adalah aplikasi Silverlight. Saya memiliki referensi wcf dalam DLL yang memiliki file "ServiceReferences.ClientConfig" itu sendiri. Saya memindahkan konten ServiceReferences.ClientConfig DLL ke proyek silverlight utama dan berhasil.

NotDan
sumber
bagaimana jika aplikasi yang menjalankan DLL adalah pihak ketiga, misalnya DLL adalah plugin untuk aplikasi lain?
Stefanos Kargas

Jawaban:

186

Saya mengalami masalah yang sama. Aplikasi saya juga merupakan aplikasi Silverlight dan layanan dipanggil dari perpustakaan kelas dengan UserControl kustom yang digunakan di dalamnya.

Solusinya sederhana. Salin definisi titik akhir dari file konfigurasi (mis. ServiceReferences.ClientConfig) pustaka kelas ke file konfigurasi aplikasi silverlight. Saya tahu Anda mengharapkannya berhasil tanpa harus melakukan ini, tetapi tampaknya seseorang di Redmond sedang berlibur hari itu.

sprite
sumber
50
Solusi ini juga berlaku untuk proyek ASP.NET dan MVC. Jika Anda menambahkan layanan ke Perpustakaan Kelas, itu tidak akan berhasil, ambil bagian system.serviceModel dari app.config di proyek perpustakaan Anda dan letakkan di web.config Anda.
Adam Pope
5
Sepertinya ini berlaku untuk semua jenis proyek, saya menggunakan Quartz.net sebagai layanan windows dan memiliki pekerjaan di rakitan berbeda yang mereferensikan layanan web. Itu juga berhasil untuk saya. Terima kasih.
thiagoleite
2
Hai, ini juga berfungsi untuk proyek Windows Phone. Seperti yang dikatakan @thiagoleite, tampaknya ini berfungsi untuk sebagian besar jenis proyek.
Thanushka
3
1 untuk lelucon liburan Redmond ... Bagaimanapun, apakah ada cara untuk menambahkannya sebagai file eksternal alih-alih bermain dengan web.config?
Shimmy Weitzhandler
1
@ Sprite Saya akhirnya mengatur pengaturan yang saya perlukan dalam kode (saya telah mengganti konstruktor klien), sebagai jawaban Vishal . Dengan cara ini akan dikirimkan ke seluruh majelis. Terima kasih!
Shimmy Weitzhandler
45

Anda juga dapat menyetel nilai-nilai ini secara terprogram di perpustakaan kelas, ini akan menghindari perpindahan yang tidak perlu dari file konfigurasi di seluruh perpustakaan. Kode contoh untuk BasciHttpBinding sederhana adalah -

BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "BasicHttpBinding_YourName";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

EndpointAddress endpointAddress = new EndpointAddress("http://<Your machine>/Service1/Service1.svc");
Service1Client proxyClient = new Service1Client(basicHttpbinding,endpointAddress);
Vishal
sumber
@wooncherk, perpustakaan kelas saya baru saja merujuk ke wsdl. Di mana saya harus meletakkan kode ini? Saya membuatnya menjadi C # dll dan memasukkan dll ke dalam file aplikasi saya, di mana saya mereferensikannya dari IronPython. Terima kasih
Срба
12

Untuk berjaga-jaga jika ada yang mengalami masalah yang sama saat menggunakan WPF (bukan WCF atau Silverlight):

Saya mengalami kesalahan ini, saat menyambung ke Layanan Web. Ketika kode saya berada di solusi Aplikasi WPF "utama", tidak masalah, itu bekerja dengan sempurna. Tetapi ketika saya memindahkan kode ke solusi lapisan-DAL yang lebih masuk akal, itu akan membuang pengecualian.

Tidak dapat menemukan elemen titik akhir default yang mereferensikan kontrak 'MyWebService.MyServiceSoap' di bagian konfigurasi klien ServiceModel. Ini mungkin karena tidak ada file konfigurasi yang ditemukan untuk aplikasi Anda, atau karena tidak ada elemen endpoint yang cocok dengan kontrak ini yang dapat ditemukan di elemen klien.

Seperti yang telah dinyatakan oleh "Sprite" di utas ini, Anda perlu menyalin tag secara manual.

Untuk aplikasi WPF, ini berarti menyalin tag dari app.config di solusi DAL saya ke app.config di solusi Aplikasi WPF utama.

Mike Gledhill
sumber
ini bagus, tapi akan lebih baik sebagai komentar singkat di bawah jawaban saya sendiri, seperti yang dilakukan "Adam Pope". Itu akan dibaca oleh lebih banyak orang.
sprite
2
@ Sprite: Saya akan menambahkan komentar, tetapi komentar StackOverflow selalu ditampilkan hanya sebagai satu paragraf panjang. Untuk balasan 5 paragraf seperti saya, itu akan menghasilkan satu paragraf yang panjang, tidak bisa dibaca, dan tidak bersahabat. Menulis tanggapan terpisah memungkinkan saya memberikan jawaban yang lebih jelas, yang lebih mungkin membantu pengguna lain (yang, mari kita hadapi, adalah inti dari situs web seperti ini)
Mike Gledhill
6

Saya mengalami masalah yang sama, karena alasan apa pun Visual Studio tidak memperbarui konfigurasi web ketika saya pertama kali menambahkan layanan. Saya menemukan bahwa memperbarui Referensi Layanan juga memperbaiki masalah ini.

Langkah:

  1. Arahkan ke Folder Referensi Layanan
  2. Perluas itu
  3. Klik Kanan dan Pilih Pembaruan Referensi Layanan
  4. Amati Konfigurasi web diperbarui
Dale C
sumber
Ya, ini berhasil untuk saya. Saya menggunakan referensi layanan wsdl pihak ke-3 & mendapatkan kesalahan ini sampai saya memperbarui referensi Layanan
ejhost
Untuk saya juga. Itu jelas karena itu berfungsi dengan baik dan tiba-tiba tidak. Saya mungkin telah membuat perubahan dan tidak memperbarui referensi layanan.
ehh
4

Ubah web.config layanan WCF sebagai "endpoint address =" "binding =" basicHttpBinding "..." (sebelumnya binding = "wsHttpBinding") Setelah membangun aplikasi, dalam konfigurasi "ServiceReferences.ClientConfig" ""> memiliki nilai . Maka itu akan bekerja dengan baik.


sumber
3

Ubah nama output.config yang dihasilkan oleh svcutil.exe menjadi app.config. itu berhasil untuk saya.

ssilas.dll
sumber
2

Apakah Anda memiliki Antarmuka yang diimplementasikan oleh kelas "UserService" Anda.

Titik akhir Anda harus menentukan antarmuka untuk atribut kontrak:

contract="UserService.IUserService"
Nick Josevski
sumber
1

Tidak yakin apakah ini masalahnya. Endpoint dan binding keduanya memiliki nama yang sama

david valentine
sumber
1

Tidak yakin apakah ini benar-benar masalah, tetapi saya melihat Anda memiliki nama yang sama untuk konfigurasi binding Anda ().

Saya biasanya mencoba untuk memanggil titik akhir saya sesuatu seperti "UserServiceBasicHttp" atau sesuatu yang serupa ("Binding" benar-benar tidak ada hubungannya di sini), dan saya mencoba memanggil konfigurasi binding saya sesuatu dengan ".... Konfigurasi", misalnya "UserServiceDefaultBinding", untuk menghindari kemungkinan bentrokan nama.

Marc

marc_s
sumber
0

Harus menambahkan layanan di file App.config memanggil agar berfungsi. Pastikan bahwa Anda tetapi setelah semua. Ini sepertinya berhasil untuk saya.

Jackstine
sumber
0

Masalah ini terjadi ketika Anda menggunakan layanan Anda melalui aplikasi lain. Jika aplikasi memiliki file konfigurasi, tambahkan saja informasi konfigurasi layanan Anda ke file ini. Dalam situasi saya tidak ada file konfigurasi jadi saya menggunakan teknik ini dan itu bekerja dengan baik. Simpan saja alamat url dalam aplikasi, baca dan gunakan metode BasicHttpBinding () kirimkan ke aplikasi layanan sebagai parameter. Ini adalah demonstrasi sederhana bagaimana saya melakukannya Itu:

Configuration config = new Configuration(dataRowSet[0]["ServiceUrl"].ToString());

var remoteAddress = new System.ServiceModel.EndpointAddress(config.Url);


SimpleService.PayPointSoapClient client = 
    new SimpleService.PayPointSoapClient(new System.ServiceModel.BasicHttpBinding(), 
    remoteAddress);
SimpleService.AccountcredResponse response = client.AccountCred(request);
Suleymani Tural
sumber
0

Bagi mereka yang bekerja dengan layanan AX 2012 AIF dan mencoba menelepon ke sana C # atau proyek VB di dalam AX (x ++) dan mengalami kesalahan seperti "tidak dapat menemukan titik akhir default" ... atau "tidak ada kontrak yang ditemukan" ... kembali ke proyek studio visual (c #) Anda dan tambahkan baris ini sebelum menentukan klien layanan Anda, lalu terapkan proyek dan mulai ulang klien AX dan coba lagi: Catatan, contohnya untuk adaptor NetTcp , Anda dapat dengan mudah menggunakan adaptor lain sesuai dengan kebutuhan Anda .

 Uri Address = new Uri("net.tcp://your-server:Port>/DynamicsAx/Services/your-port-name");
 NetTcpBinding Binding = new NetTcpBinding();
 EndpointAddress EndPointAddr = new EndpointAddress(Address);
 SalesOrderServiceClient Client = new SalesOrderServiceClient(Binding, EndPointAddr);
Boody
sumber
-2

Jika Anda menggunakan aplikasi WPF menggunakan kerangka PRISM maka konfigurasi harus ada di proyek start up Anda (yaitu di proyek tempat bootstrapper Anda berada.)

Singkatnya, hapus saja dari perpustakaan kelas dan masukkan ke dalam proyek permulaan.

VRK
sumber