webentwicklung-frage-antwort-db.com.de

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

Irgendwelche Ideen, wie man das beheben kann?

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, wurde im Abschnitt "ServiceModel-Client-Konfiguration" nicht gefunden. Dies kann daran liegen, dass für Ihre Anwendung keine Konfigurationsdatei gefunden wurde oder dass kein Endpunktelement gefunden wurde, das mit diesem Vertrag übereinstimmt.

Aufgelöst!

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

96
NotDan

Ich hatte ein Problem mit dem gleichen 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 damit rechnen würden, ohne dass Sie dies tun müssen, aber anscheinend hatte jemand in Redmond an diesem Tag Urlaub.

185
sprite

Sie können diese Werte auch programmgesteuert in der Klassenbibliothek festlegen, um zu vermeiden, dass die Konfigurationsdateien in der Bibliothek unnötig verschoben werden. Der Beispielcode für die einfache 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);
43
Vishal

Nur für den Fall, dass jemand bei der Verwendung von WPF das gleiche Problem hat (anstelle von WCF oder Silverlight):

Ich hatte diesen Fehler beim Herstellen einer Verbindung zu einem Webdienst. Wenn sich mein Code in der "Haupt" WPF Application Solution befand, kein Problem, es hat perfekt funktioniert. Wenn ich den Code jedoch auf die sinnvollere DAL-Layer-Lösung umstellte, würde dies die Ausnahme auslösen.

Das Standardendpunktelement, das auf den Vertrag 'MyWebService.MyServiceSoap' verweist, konnte im ServiceModel-Client-Konfigurationsabschnitt nicht gefunden werden. Dies kann daran liegen, dass für Ihre Anwendung keine Konfigurationsdatei gefunden wurde oder dass kein Endpunktelement gefunden wurde, das mit diesem Vertrag übereinstimmt.

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

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

12
Mike Gledhill

Ich bin auf dasselbe Problem gestoßen, aus welchem ​​Grund auch immer, Visual Studio hat die Web-Konfiguration nicht aktualisiert, als ich den Dienst zum ersten Mal hinzufügte. Ich habe festgestellt, dass durch das Aktualisieren der Servicereferenz auch dieses Problem behoben wurde.

Schritte:

  1. Navigieren Sie zum Servicereferenzordner
  2. Es ausweiten
  3. Klicken Sie mit der rechten Maustaste und wählen Sie Update Service Reference aus
  4. Beachten Sie, dass die Web-Konfiguration aktualisiert wird
6
Dale C

Ändern Sie die web.config des WCF-Dienstes in "Endpunktadresse =" "binding =" basicHttpBinding "..." (zuvor bindend = "wsHttpBinding") . Dann wird es gut funktionieren.

4
Sarav

Benennen Sie die von svcutil.exe erzeugte output.config in app.config . Um. Es hat für mich funktioniert.

3
ssilas

Verfügen Sie über eine Schnittstelle, die von Ihrer "UserService" -Klasse implementiert wird?.

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

contract="UserService.IUserService"
2
Nick Josevski

Nicht sicher, ob dies ein Problem ist. Endpunkt und Bindung haben denselben Namen

1
david valentine

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 etwas Ähnliches (die "Bindung" hat hier wirklich nichts zu tun) und ich versuche, meine Bindungskonfigurationen etwas mit ".... Konfiguration" zu nennen, z. "UserServiceDefaultBinding", um mögliche Namenskollisionen zu vermeiden.

Marc

1
marc_s

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

0
Jackstine

Für diejenigen, die mit AX 2012 AIF services arbeiten und versuchen, dort C # oder VB - Projekt in AX (x ++) aufzurufen, und unter solchen Fehlern leiden, dass "keinen Standardendpunkt finden konnte ... oder "Kein Vertrag gefunden" ... Gehen Sie zurück zu Ihrem Visual Studio (c #) - Projekt und fügen Sie diese Zeilen hinzu, bevor Sie Ihren Service-Client definieren. Stellen Sie dann das Projekt bereit und starten Sie AX-Client und neu wiederholen Sie den Vorgang: Beachten Sie, dass das Beispiel für den NetTcp-Adapter ist. Sie können stattdessen einfach einen anderen Adapter verwenden.

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

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

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
Suleymani Tural