2009-02-26 9 views
15

Jestem nowy w WCF i próbuję uruchomić moją pierwszą usługę. Jestem blisko, ale utknąłem na tym problemie.Usługa WCF - środowisko wykonawcze nie widzące ServiceContract na interfejsie

W moim pliku definicji interfejsu, mam to:

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

Następnie Mam plik klasy (za usługę), która dziedziczy go:

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

Wreszcie, w moim projekcie Host I ma to:

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

Wszystko kompiluje się dobrze, a gdy host idzie dodać punkt końcowy usługi, to b ombs z tym: "Typ umowy Inventory.InventoryService nie jest przypisywany z ServiceContractAttribute. W celu zdefiniowania ważnej umowy określony typ (interfejs kontraktowy lub klasa usługowa) musi być przypisany za pomocą ServiceContractAttribute. "

Wiem, że brakuje mi czegoś prostego tutaj Mam interfejs wyraźnie oznaczony jako kontrakt serwisowy i nie ma odniesienia do tego projektu do projektu Host

Odpowiedz

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

Jeśli atrybut ServiceContract jest na interfejsie nie beton klasy, spróbuj wykonać następujące czynności:.

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

Kiedy próbuję to, że daje mi ArgumentException, "Obsługa tylko ServiceHost Typy usług klasy s. " –

+0

Przełączono niewłaściwy - zmień wywołanie AddServiceEndpoint na interfejs, utrzymuj ServiceHost jako klasę. – Brian

+0

Got to! Występuję więc ServiceHost, przekazując konkretną klasę, ale definiuję punkt końcowy lub powiązanie z interfejsem, który jest tak naprawdę definicją umowy (to znaczy nie jest klasą). W końcu zrozumiem to. Dzięki, Brian i Andrew. –

Powiązane problemy