Frage

Ich habe einen WCF-Webdienst, der von einer Klassenbibliothek verwiesen wird. Nachdem das Projekt ausgeführt wird, wenn das Service-Client-Objekt aus dem Innern einer Klassenbibliothek erstellen, erhalte ich eine InvalidOperationException mit der Meldung:

  

kann nicht Standard Endpunktelement finden, den Vertrag verweist   ‚MyServiceReference.IMyService‘ im Servicemodel-Client   Konfigurationsabschnitt. Dies könnte sein, weil keine Konfigurationsdatei war   für Ihre Anwendung gefunden, oder weil kein Endpunkt Elementanpassung   Dieser Vertrag könnte in dem Client-Elemente gefunden werden.

Der Code, den ich die Instanz erstellen bin mit ist:

myServiceClient = new MyServiceClient();

Dabei gilt MyServiceClient erbt von

System.ServiceModel.ClientBase

Wie löse ich das?

Hinweis: Ich habe eine separate Konsole-Anwendung, die einfach das gleiche Service-Objekt und macht es Anrufe und es funktioniert ohne ohne Probleme

.
War es hilfreich?

Lösung

  

Hier ist meine Datei app.config der Klassenbibliothek:

Sie sollten diese Konfigurationseinstellungen setzen auf Hauptkonfigurationsdatei der App. .NET-Anwendung (die Ihre Klassenbibliothek aufruft) verwendet, um Daten von einem eigenen Konfigurationsdatei nicht aus Ihrer Bibliothek Konfigurationsdatei.

Andere Tipps

Sie können auch den Endpunkt im Code festgelegt:

http://msdn.microsoft.com/en-us/library/ ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");

// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);

Ich hatte einen ähnlichen Fall. Ich hatte eine Klassenbibliothek, die einen Web-Service genannt, dann habe ich eine Exe hatte, dass die Klasse-lib .DLL- genannt. Ich denke, es ist die Exe-config-Datei, die verwendet wird, und nicht die des DLL-Konfig.

Aber wie Richard oben gesagt, ich musste den Namensraum voll qualifizieren. Es ist ein bisschen wie ein Schmerz. Im Folgenden finden Sie genau das, was ich geändert. Der Schmerz ist, dass ich es an zwei Stellen geändert hatte, ein in dem reference.cs, die erzeugt wird, wenn Sie einen Dienstverweis, und die andere in der Konfigurationsdatei erstellen. So ändere jedes Mal wenn ich den Web-Service und tue eine „Update Reference“ ich wieder die Änderung an dem C # -Code zu machen.

1) Sie müssen tatsächlich die Configuration in den reference.cs wie folgt ändern:

Von: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

An: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2) und ändern Sie dann auch den „Vertrag“ Wert in alle zugehörigen app.config (für .dll und .exe ist) wie folgt:

Von:

http: // nxwtest08bt1 .dev.txfb-ins.com / TFBIC.RCT.BizTalk.Orchestrations / WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc Bindung = "wsHttpBinding" bindingConfiguration = "WSHttpBinding_ITwoWayAsync"                 Vertrag = "RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations"                 name = "WSHttpBinding_ITwoWayAsync">

An:

http: // nxwtest08bt1 .dev.txfb-ins.com / TFBIC.RCT.BizTalk.Orchestrations / WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc Bindung = "wsHttpBinding" bindingConfiguration = "WSHttpBinding_ITwoWayAsync" Vertrag = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" name = "WSHttpBinding_ITwoWayAsync">

Just klar zu sein - wie habe ich wissen, was die vollständige Namensraum war? Die Namespace-Programm war TFBIC.RCT.HIP. Im Innern, dass hat der C # -Code eine zusätzliche Namespace-Anweisung:

namespace RCTHipComponents

Es würde wahrscheinlich helfen, wenn Sie Ihre Datei app.config geschrieben, da diese Art von Fehlern neigt dazu, ein Problem im <endpoint> Block zu zeigen. Stellen Sie sicher, dass der Vertrag Attribut scheint Recht auf Sie.

Edit: Versuchen Sie vollständig Ihren Auftragswert qualifizieren; verwenden Sie den vollständigen Namespace. Ich denke, was benötigt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top