WCF Hatası - 'UserService.UserService' sözleşmesine başvuran varsayılan uç nokta öğesi bulunamadı


98

Bunu nasıl düzelteceğine dair bir fikrin var mı?

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>

ServiceModel istemci yapılandırması bölümünde "UserService.UserService" sözleşmesine başvuran varsayılan uç nokta öğesi bulunamadı. Bunun nedeni, uygulamanız için hiçbir yapılandırma dosyasının bulunmaması veya istemci öğesinde bu sözleşmeyle eşleşen hiçbir uç nokta öğesinin bulunamaması olabilir.

Çözüldü!

Bunun bir Silverlight uygulaması olduğundan bahsetmedim. Kendi "ServiceReferences.ClientConfig" dosyasına sahip bir DLL dosyasında wcf başvurum vardı. DLL'nin ServiceReferences.ClientConfig içeriğini ana silverlight projesine taşıdım ve işe yaradı.


ya DLL'yi çalıştıran uygulama üçüncü şahıssa, örneğin DLL başka bir uygulama için bir eklenti ise?
Stefanos Kargas

Yanıtlar:


186

Aynı problemle karşılaştım. Benim uygulamam da bir Silverlight uygulamasıydı ve hizmet, içinde kullanılan özel bir UserControl ile bir sınıf kitaplığından çağrılıyordu.

Çözüm basit. Uç nokta tanımlarını sınıf kitaplığının yapılandırma dosyasından (ör. ServiceReferences.ClientConfig) silverlight uygulamasının yapılandırma dosyasına kopyalayın. Bunu yapmak zorunda kalmadan çalışmasını beklediğinizi biliyorum, ama görünüşe göre Redmond'da biri o gün tatil yapmış.


50
Bu çözüm ASP.NET ve MVC projeleri için de geçerlidir. Hizmeti bir Sınıf Kitaplığına eklerseniz, kutudan çıkmaz, kitaplık projenizdeki app.config'den system.serviceModel bölümünü alın ve web.config dosyanıza yerleştirin.
Adam Papa

5
Bu her tür proje için geçerli gibi görünüyor, quartz.net'i Windows hizmeti olarak kullanıyordum ve web hizmetini referans alan farklı bir montajda bir işim vardı. Benim için de çalıştı. Teşekkürler.
thiagoleite

2
Merhaba, bir Windows Phone projesi için de çalıştı. @Thiagoleite'in dediği gibi, proje türlerinin çoğu için çalışıyor gibi görünüyor.
Thanushka

3
Redmond tatil şakası için +1 ... Her neyse, ile oynamak yerine harici bir dosya olarak eklemenin bir yolu var web.configmı?
Shimmy Weitzhandler

1
Ben VISHAL en gibi (İstemci yapıcı geçersiz kıldık) kodunda benim gerekli ayarları yapmak sona erdi @sprite cevap . Bu şekilde montajlar arasında sevk edilir. Teşekkürler!
Shimmy Weitzhandler

45

Bu değerleri sınıf kitaplığında programlı olarak da ayarlayabilirsiniz, bu, yapılandırma dosyalarının kitaplık boyunca gereksiz hareket etmesini önler. Basit BasciHttpBinding için örnek kod -

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

@wooncherk, sınıf kitaplığımda sadece bir wsdl referansı var. Bu kodu nereye koymalıyım? Onu bir C # dll'de oluşturuyorum ve dll'yi uygulama dosyalarıma koyuyorum, burada ona IronPython'dan başvuruyorum. Teşekkürler
Срба

12

WPF kullanırken (WCF veya Silverlight yerine) herhangi birinin aynı sorunu yaşaması durumunda:

Bir Web Hizmetine bağlanırken bu hatayı aldım. Kodum "ana" WPF Uygulama çözümündeyken sorun değil, mükemmel çalıştı. Ancak kodu daha mantıklı DAL katmanı çözümüne taşıdığımda, istisnayı atacaktı.

ServiceModel istemci yapılandırması bölümünde 'MyWebService.MyServiceSoap' sözleşmesine başvuran varsayılan uç nokta öğesi bulunamadı. Bunun nedeni, uygulamanız için hiçbir yapılandırma dosyasının bulunmaması veya istemci öğesinde bu sözleşmeyle eşleşen hiçbir uç nokta öğesinin bulunamaması olabilir.

Bu konu başlığında "Sprite" tarafından belirtildiği gibi, etiketi manuel olarak kopyalamanız gerekir.

WPF uygulamaları için bu, etiketin DAL çözümümdeki app.config'den ana WPF Uygulama çözümündeki app.config'e kopyalanması anlamına gelir .


bu harika, ama kendi cevabıma göre kısa bir yorum yapmak daha iyi olurdu, tıpkı "Adam Pope" gibi. Çok daha fazla kişi tarafından okunacaktır.
sprite

2
@sprite: Bir yorum eklerdim, ancak StackOverflow yorumları her zaman tek bir uzun paragraf olarak gösterilir. Benimki gibi 5 paragraflık bir yanıt için, bu uzun, okunamaz, dostça olmayan bir paragrafla sonuçlanırdı. Ayrı bir yanıt yazmak, daha net bir yanıt vermeme olanak tanıdı; bu, diğer kullanıcılara yardımcı olma olasılığı daha yüksektir (ki bununla yüzleşelim, bunun gibi web sitelerinin amacı budur)
Mike Gledhill

6

Aynı sorunla karşılaştım, her ne sebeple olursa olsun, hizmeti ilk eklediğimde Visual Studio web yapılandırmasını güncellemedi. Servis Referansını güncellemenin de bu sorunu çözdüğünü buldum.

Adımlar:

  1. Servis Referans Klasörüne gidin
  2. Genişletin
  3. Sağ Tıkla ve Seç güncelle Servis Referansını
  4. Güncellenecek web Yapılandırmasını gözlemleyin

Evet, bu benim için hile yaptı. Üçüncü taraf bir wsdl hizmet referansı kullanıyorum ve Hizmet referansını güncelleyene kadar bu hatayı
alıyordum

Benim için de. İyi çalıştığı ve aniden çalışmadığı için açıktı. Bir değişiklik yapmış olabilirim ve hizmet referansını güncellemedim.
ehh

4

WCF hizmetinin web.config'ini "uç nokta adresi =" "bağlama =" basicHttpBinding "..." olarak değiştirin (önceden bağlama = "wsHttpBinding") Uygulamayı oluşturduktan sonra, "ServiceReferences.ClientConfig" "" yapılandırma> değerine sahip . O zaman iyi çalışacak.


3

Svcutil.exe tarafından üretilen output.config dosyasını app.config olarak yeniden adlandırın. benim için çalıştı.


2

"UserService" sınıfınızın uyguladığı bir Arayüzünüz var mı?

Uç noktalarınız, sözleşme özelliği için bir arayüz belirtmelidir:

contract="UserService.IUserService"


1

Gerçekten sorun olup olmadığından emin değilim, ama görüyorum ki bağlama konfigürasyonunuz için aynı isme sahipsiniz ().

Genellikle uç noktalarımı "UserServiceBasicHttp" veya benzer bir şey olarak adlandırmaya çalışırım ("Bağlama" nın burada gerçekten bir işi yoktur) ve bağlama yapılandırmalarımı ".... Yapılandırma" ile adlandırmaya çalışırım, örn. Olası ad çakışmalarını önlemek için "UserServiceDefaultBinding".

Marc


0

Çalışması için hizmeti çağıran App.config dosyasına eklemek gerekiyordu. Her şeye rağmen kendinizden emin olun. Bu benim için işe yaradı.


0

Bu sorun, hizmetinizi başka bir uygulama aracılığıyla kullandığınızda ortaya çıkar.Uygulama yapılandırma dosyası içeriyorsa, yalnızca hizmet yapılandırma bilgilerinizi bu dosyaya ekleyin. Benim durumumda herhangi bir yapılandırma dosyası yoktu, bu yüzden bu tekniği kullandım ve iyi çalıştı. Url adresini uygulamada saklayın, okuyun ve BasicHttpBinding () yöntemini kullanarak servis uygulamasına parametre olarak gönderin. o:

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

0

AX 2012 AIF servisleri ile çalışan ve oraya AX (x ++) içinde C # veya VB projesini aramaya çalışanlar ve "varsayılan uç nokta bulunamadı" gibi hatalardan muzdarip olanlar için ... veya "sözleşme bulunamadı" ... geri dönün görsel stüdyo (c #) projenize ekleyin ve hizmet istemcinizi tanımlamadan önce bu satırları ekleyin, ardından projeyi dağıtın ve AX istemcisini yeniden başlatın ve tekrar deneyin: Not, örnek NetTcp adaptörü içindir , bunun yerine ihtiyacınıza göre başka bir adaptörü kolayca kullanabilirsiniz .

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

-2

PRISM çerçevesini kullanarak WPF uygulamasını kullanıyorsanız, başlangıç ​​projenizde (yani önyükleyicinizin bulunduğu projede) yapılandırma mevcut olmalıdır.

Kısacası, onu sınıf kitaplığından çıkarın ve bir başlangıç ​​projesine koyun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.