2009-02-26 5 views
15

Ich bin neu in WCF und versuche, meinen ersten Dienst zu erhalten. Ich bin nah dran, stecke aber an diesem Problem fest.WCF-Dienst - Laufzeit wird nicht angezeigt ServiceContract auf Schnittstelle

In meiner Interface-Definitionsdatei, ich habe dies:

[ServiceContract(Namespace="http://mysite.com/wcfservices/2009/02")]  
    public interface IInventoryService 
    { 
     [OperationContract] 
     string GetInventoryName(int InventoryID); 
    } 

Dann habe ich meine Klassendatei (für den Dienst), die es erbt:

public class InventoryService : IInventoryService 
    { 
     // This method is exposed to the wcf service 
     public string GetInventoryName(int InventoryID) 
     { 
      return "White Paper"; 
     } 

Schließlich habe ich in meinem Host-Projekt have this:

ServiceHost host = new ServiceHost(typeof(Inventory.InventoryService)); 
    host.AddServiceEndpoint(typeof(Inventory.InventoryService), new NetTcpBinding(), 
     "net.tcp://localhost:9000/GetInventory"); 
    host.Open(); 

Alles kompiliert gut, und wenn der Host den Dienstendpunkt hinzufügt, b ombs mit diesem: "Der Vertragstyp Inventory.InventoryService wird nicht mit ServiceContractAttribute zugeordnet. Um einen gültigen Vertrag zu definieren, muss der angegebene Typ (entweder Vertragsschnittstelle oder Serviceklasse) mit ServiceContractAttribute verknüpft sein. "

Ich weiß, dass mir hier etwas Einfaches fehlt. Ich habe die Schnittstelle eindeutig als Servicevertrag gekennzeichnet und es gibt einen Verweis auf dieses Projekt in dem Host-Projekt

Antwort

25
ServiceHost host = new ServiceHost(typeof(Inventory.InventoryService)); 
host.AddServiceEndpoint(typeof(Inventory.InventoryService), new NetTcpBinding(), 
    "net.tcp://localhost:9000/GetInventory"); 
host.Open(); 

Wenn Ihr Servicecontract Attribut auf der Schnittstelle nicht die konkrete Klasse ist, versuchen sie folgendes:.

ServiceHost host = new ServiceHost(typeof(Inventory.InventoryService)); 
host.AddServiceEndpoint(typeof(Inventory.IInventoryService), new NetTcpBinding(), 
    "net.tcp://localhost:9000/GetInventory"); 
host.Open(); 
+0

Wenn ich versuche, dass es gibt mir die ArgumentException, "ServiceHost only support s Klassen-Service-Typen. " –

+0

Die falsche umgeschaltet - ändern Sie den AddServiceEndpoint Aufruf an die Schnittstelle, halten Sie ServiceHost als Klasse. – Brian

+0

Verstanden! Also instanziiere ich ServiceHost, übergebe die konkrete Klasse, definiere aber den Endpunkt oder die Bindung mit der Schnittstelle, die wirklich die Vertragsdefinition ist (d. H. Nicht die Klasse). Ich werde irgendwann den Dreh rauskriegen. Danke Brian und Andrew. –

Verwandte Themen