WCF-Fehler - Standardendpunktelement, das auf den Vertrag 'UserService.UserService' verweist, konnte nicht gefunden werden.


98

Irgendwelche Ideen, wie man das behebt?

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>

Das Standardendpunktelement, das auf den Vertrag 'UserService.UserService' verweist, konnte im Abschnitt zur Konfiguration des ServiceModel-Clients nicht gefunden werden. Dies kann daran liegen, dass für Ihre Anwendung keine Konfigurationsdatei gefunden wurde oder dass im Client-Element kein Endpunktelement gefunden wurde, das diesem Vertrag entspricht.

Aufgelöst!

Ich habe nicht erwähnt, dass dies eine Silverlight-Anwendung ist. Ich hatte die wcf-Referenz in einer DLL, die eine eigene "ServiceReferences.ClientConfig" -Datei hatte. Ich habe den Inhalt der ServiceReferences.ClientConfig der DLL in das Silverlight-Hauptprojekt verschoben, und es hat funktioniert.


Was ist, wenn die Anwendung, auf der die DLL ausgeführt wird, von Drittanbietern stammt, z. B. die DLL ein Plugin für eine andere Anwendung ist?
Stefanos Kargas

Antworten:


186

Ich hatte das gleiche Problem. Meine Anwendung war auch eine Silverlight-Anwendung, und der Dienst wurde aus einer Klassenbibliothek mit einem benutzerdefinierten UserControl aufgerufen, das darin verwendet wurde.

Die Lösung ist einfach. Kopieren Sie die Endpunktdefinitionen aus der Konfigurationsdatei (z. B. ServiceReferences.ClientConfig) der Klassenbibliothek in die Konfigurationsdatei der Silverlight-Anwendung. Ich weiß, dass Sie erwarten würden, dass es funktioniert, ohne dies tun zu müssen, aber anscheinend hatte jemand in Redmond an diesem Tag Urlaub.


50
Diese Lösung gilt auch für ASP.NET- und MVC-Projekte. Wenn Sie den Dienst zu einer Klassenbibliothek hinzufügen, funktioniert dies nicht. Nehmen Sie den Abschnitt system.serviceModel aus der app.config in Ihrem Bibliotheksprojekt und fügen Sie ihn in Ihre web.config ein.
Adam Pope

5
Es sieht so aus, als ob dies für jede Art von Projekt zutrifft. Ich habe quartz.net als Windows-Dienst verwendet und hatte einen Job in einer anderen Assembly, die auf den Webdienst verweist. Es hat auch bei mir funktioniert. Vielen Dank.
Thiagoleite

2
Hallo, es hat auch für ein Windows Phone-Projekt funktioniert. Wie @thiagoleite sagt, scheint es für die meisten Projekttypen zu funktionieren.
Thanushka

3
+1 für den Redmond-Urlaubswitz ... Wie auch immer, gibt es eine Möglichkeit, ihn als externe Datei hinzuzufügen, anstatt mit dem zu spielen web.config?
Shimmy Weitzhandler

1
@sprite Am Ende habe ich meine erforderlichen Einstellungen im Code festgelegt (ich habe den Client-Konstruktor überschrieben), als Vishals Antwort . Auf diese Weise wird es über Baugruppen hinweg versendet. Vielen Dank!
Shimmy Weitzhandler

45

Sie können diese Werte auch programmgesteuert in der Klassenbibliothek festlegen. Dadurch wird ein unnötiges Verschieben der Konfigurationsdateien in der Bibliothek vermieden. Der Beispielcode für einfaches BasciHttpBinding lautet -

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, meine Klassenbibliothek hat nur einen Verweis auf eine WSDL. Wo soll ich diesen Code ablegen? Ich baue es in eine C # -Dll aus und füge die DLL in meine App-Dateien ein, wo ich von IronPython aus darauf verweise. Vielen Dank
22рба

12

Nur für den Fall, dass jemand bei der Verwendung von WPF auf dasselbe Problem stößt (anstelle von WCF oder Silverlight):

Ich hatte diesen Fehler beim Herstellen einer Verbindung zu einem Webdienst. Als mein Code in der "Haupt" WPF-Anwendungslösung war, kein Problem, es funktionierte perfekt. Wenn ich den Code jedoch auf die sinnvollere DAL-Layer-Lösung verschob, wurde die Ausnahme ausgelöst.

Das Standardendpunktelement, das auf den Vertrag 'MyWebService.MyServiceSoap' verweist, konnte im Abschnitt zur Konfiguration des ServiceModel-Clients nicht gefunden werden. Dies kann daran liegen, dass für Ihre Anwendung keine Konfigurationsdatei gefunden wurde oder dass im Client-Element kein Endpunktelement gefunden wurde, das diesem Vertrag entspricht.

Wie von "Sprite" in diesem Thread angegeben, müssen Sie das Tag manuell kopieren.

Für WPF-Apps bedeutet dies, dass das Tag aus der app.config in meiner DAL-Lösung in die app.config in der Hauptlösung der WPF-Anwendung kopiert wird.


Das ist großartig, wäre aber besser als ein kurzer Kommentar unter meiner eigenen Antwort, genau wie "Adam Pope". Es würde von viel mehr Leuten gelesen werden.
Sprite

2
@sprite: Ich hätte einen Kommentar hinzugefügt, aber StackOverflow-Kommentare werden immer nur als ein langer Absatz angezeigt. Bei einer Antwort mit 5 Absätzen wie meiner hätte dies zu einem langen, unlesbaren, unfreundlichen Absatz geführt. Durch das Schreiben einer separaten Antwort konnte ich eine klarere Antwort geben, die eher anderen Benutzern hilft (was, wie wir sehen, der Sinn von Websites wie dieser ist)
Mike Gledhill

6

Ich bin auf dasselbe Problem gestoßen, aus welchem ​​Grund auch immer, Visual Studio hat die Webkonfiguration beim ersten Hinzufügen des Dienstes nicht aktualisiert. Ich habe festgestellt, dass durch das Aktualisieren der Dienstreferenz auch dieses Problem behoben wurde.

Schritte:

  1. Navigieren Sie zum Dienstreferenzordner
  2. Es ausweiten
  3. Klicken Sie mit der rechten Maustaste und wählen Sie Update Service Reference
  4. Beachten Sie, dass die Webkonfiguration aktualisiert wird

Ja, das hat den Trick für mich getan. Ich verwende eine WSDL-Dienstreferenz eines Drittanbieters und habe diesen Fehler erhalten, bis ich die Dienstreferenz aktualisiert habe
ejhost

Für mich auch. Es war offensichtlich, da es gut funktioniert und plötzlich nicht mehr. Möglicherweise habe ich eine Änderung vorgenommen und die Servicereferenz nicht aktualisiert.
ehh

4

Ändern Sie die web.config des WCF-Dienstes als "Endpoint Address =" "Binding =" BasicHttpBinding "..." (zuvor Binding = "wsHttpBinding"). Nach dem Erstellen der App hat "ServiceReferences.ClientConfig" "" configuration> den Wert . Dann wird es gut funktionieren.


3

Benennen Sie die von svcutil.exe erzeugte output.config in app.config um. es hat bei mir funktioniert.


2

Haben Sie eine Schnittstelle, die Ihre "UserService" -Klasse implementiert?

Ihre Endpunkte sollten eine Schnittstelle für das Vertragsattribut angeben:

contract="UserService.IUserService"

1

Ich bin mir nicht sicher, ob dies ein Problem ist. Endpunkt und Bindung haben beide den gleichen Namen


1

Ich bin mir nicht sicher, ob es wirklich ein Problem ist, aber ich sehe, dass Sie denselben Namen für Ihre Bindungskonfiguration haben ().

Normalerweise versuche ich, meine Endpunkte so etwas wie "UserServiceBasicHttp" oder ähnliches aufzurufen (die "Bindung" hat hier wirklich nichts zu tun), und ich versuche, meine Bindungskonfigurationen so etwas wie ".... Konfiguration" aufzurufen, z "UserServiceDefaultBinding", um mögliche Namenskonflikte zu vermeiden.

Marc


0

Musste den Dienst in der aufrufenden App.config-Datei hinzufügen, damit er funktioniert. Stellen Sie sicher, dass Sie es aber doch tun. Das schien für mich zu funktionieren.


0

Dieses Problem tritt auf, wenn Sie Ihren Dienst über eine andere Anwendung verwenden. Wenn die Anwendung eine Konfigurationsdatei hat, fügen Sie einfach Ihre Dienstkonfigurationsinformationen zu dieser Datei hinzu. In meiner Situation gab es keine Konfigurationsdatei, daher verwende ich diese Technik und sie hat einwandfrei funktioniert. Speichern Sie einfach die URL-Adresse in der Anwendung, lesen Sie sie und senden Sie sie mit der BasicHttpBinding () -Methode als Parameter an die Dienstanwendung. Dies ist eine einfache Demonstration, wie ich es gemacht habe es:

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

Für diejenigen, die mit AX 2012 AIF- Diensten arbeiten und versuchen, dort C # anzurufen oder VB-Projekt in AX (x ++) und unter solchen Fehlern leiden: "Standardendpunkt konnte nicht gefunden werden" ... oder "Kein Vertrag gefunden" ... gehen Sie zurück Fügen Sie diese Zeilen zu Ihrem Visual Studio (c #) -Projekt hinzu und fügen Sie diese Zeilen hinzu, bevor Sie Ihren Service-Client definieren. Stellen Sie dann das Projekt bereit und starten Sie den AX-Client neu .

 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

Wenn Sie eine WPF-Anwendung mit PRISM-Framework verwenden, sollte die Konfiguration in Ihrem Startprojekt vorhanden sein (dh in dem Projekt, in dem sich Ihr Bootstrapper befindet).

Kurz gesagt, entfernen Sie es einfach aus der Klassenbibliothek und fügen Sie es in ein Startprojekt ein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.