2013-01-16 16 views
6

Ich habe einen Verweis auf einen WCF-Dienst hinzugefügt, der zwei Endpunkte hat. Bei der Zugabe des Dienstes der folgenden auf die Config-Datei zu erhalten hinzugefügt:Konnte das Endpunktelement mit Name und Vertrag nicht finden

<client> 
    <endpoint name="ABCServiceV1" address="http://staging.ABCwebservices.com/ABC/Service.svc" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV1" 
    contract="ABCService.IService" /> 
    <endpoint name="ABCServiceV2" address="http://staging.ABCwebservices.com/ABC/Service.svc/20" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV2" 
    contract="ABCService.IService1" /> 
</client> 

Der Code den Client ist wie unten zu erstellen:

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV2"); 

aber ich erhalte eine Fehlerlaufzeit - „Kann nicht Suchen Sie im Abschnitt ServiceModel-Clientkonfiguration nach Endpunktelement mit dem Namen 'ABCServiceV2' und dem Vertrag 'ABCService.IService' Dies liegt möglicherweise daran, dass keine Konfigurationsdatei für Ihre Anwendung gefunden wurde oder kein mit diesem Namen übereinstimmendes Endpunktelement im Clientelement gefunden wurde . "

wenn ich ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); verwendet dann funktioniert alles gut. Aber wenn ABCServiceV2 verwendet wird, versucht es, nach Contract - ABCService.IService - zu suchen, wenn es nach - ABCService.IService1 suchen sollte.

Wie mache ich es für den richtigen Vertrag suchen?

+0

Die Adresse für die ABCServiceV2 hat eine ‚20‘ bis zum Ende hinzugefügt ... Ich bin nicht sicher, ob das etwas damit zu tun hat oder nicht. Nur eine Beobachtung. – user959729

+0

Ich denke, das sollte in Ordnung sein, da die '20' benötigt wird, um den Endpunkt anders zu machen. Beide Endpunkte des Dienstes funktionieren auf einem Tool wie SoapUI einwandfrei. Das Problem liegt also irgendwo im Client-Code. – ipoh

Antwort

3

Wenn Sie einen zweiten Verweis auf einen anderen Dienst (ABCServiceV2) hinzugefügt haben, dann wird dies, glaube ich, eine zweite Dienstklasse für ABCServiceV2 generiert haben. Die beiden Klassen implementieren separate Verträge (ABCService.IService und ABCService.IService1), sodass Sie die Endpunkte nicht austauschen können.

Ich glaube, Sie sollten Ihre zwei Service-Endpunkte der Lage sein, zu initialisieren, wie so:

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); 
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2"); 
+1

Danke .. Das Problem war, dass ich ServiceClient anstelle von Service1Client verwendet habe. Der folgende Code funktioniert ohne Probleme: ABCService.Service1Client ABCClient1 = neuer Service1Client ("ABCServiceV2"); – ipoh

1

Auch wenn dieser Beitrag alt ist und beantwortet, die Antwort ist nicht in meinem Fall geholfen hat. Mein Problem war, dass ich den Service-Client mit dem Tool svcutil.exe generierte, aber überhaupt keinen Namespace angegeben habe; Daher wurde der Name des Vertragsnamensbereichs standardmäßig als Ziel-Namespace des Schemadokuments generiert, ja total message.

Auf der anderen Seite habe ich versucht, die Konfigurationsdatei zu verwenden, die generiert wird, wenn eine Servicereferenz zum Projekt hinzugefügt wird. Der Vertragsnamensraum in dieser Datei ist ServiceReference1 (standardmäßig) oder ein anderer Name, den Sie wollen, perfekter Sturm! Aber ich musste lediglich den Namespace-Teil aus dem FQN aus dem Vertragsattribut <endpoint> entfernen, und der Vertrag wurde für die CLR sichtbar.

Hoffnung dieser Hilfe andere