2011-01-14 32 views
2

ich diesen WCF-Service-Vertrag haben (stark vereinfacht, aber achten Sie auf den Namensraum in es ist):Wie kann ich den Namespace eines Vertrags in der XML-Konfiguration eines WCF-Endpunkts angeben?

namespace Foo.Services.BarService 
{ 
    [ServiceContract] 
    interface BarContract {... } 
} 

In meinem app.config (Client-Seite), konfiguriere ich einen Endpunkt für einige Service:

<endpoint address="..." 
      binding="..." 
      contract="Foo.Services.BarService.BarContract" /> 

Dies führt jedoch zu einem Fehler, der besagt, dass kein Endpunkt in der Clientkonfiguration gefunden wurde, die unterstützt. Ich kann diesen Fehler nur beheben, indem ich den contract-Attributwert zu (d. H. Durch das Entfernen des Namespace) ändert.

Warum ist das? Woher könnte dieser Fehler kommen? Warum muss ich den Namespace-Teil eines Vertragstyps nicht erwähnen? Sollte das nicht noch mehr dazu führen, dass WCF keinen passenden Endpunkt findet?


Antworten auf die Fragen in @Ladislav Mrnka Kommentar unten:

  • Ich spreche von der Client-Seite. (Ich habe vergessen, dieses Bit zu erwähnen; Entschuldigung dafür.) Kann dieser Fehler möglicherweise von der Server-Seite kommen?

  • erzeugen ich den obenen Service-Vertrag, zusammen mit einer BarClient Klasse, die es implementiert, über visuelles Dienstverweis hinzufügen Anlage Studio. Ich habe die URL der BarService angegeben, die von jemand anderem ausgeführt wird. Dort habe ich auch angegeben, dass der Dienst in den Namespace Foo.Services.BarService gestellt werden soll.

  • Ich wollte den Dienst direkt über die,Klasse für mich automatisch generieren, nicht über eine ChannelFactory<BarContract>.

+0

Ist das Problem bei der Service- oder Client-Konfiguration? Wie haben Sie den Kunden erstellt? –

+0

@Ladislav, Ich habe eine Antwort auf Ihre Fragen am Ende meiner Frage angehängt. – stakx

Antwort

3

Erstellen von Client von Dienst hinzufügen Referenz nicht Namespace-Struktur aus dem Dienst neu zu erstellen. Alle erstellten Typen und Verträge werden in einem neuen Namespace platziert, der durch den Namen der Service-Referenz definiert wird. Also, ich nehme an, Sie haben Ihre Service-Referenz BarService genannt. Die Client-Konfiguration muss den Namen der generierten Verträge folgen.