2009-02-26 16 views
15

Soy nuevo en WCF y trato de que mi primer servicio se ejecute. Estoy cerca, pero atascado en este problema.WCF Service: el tiempo de ejecución no muestra el ServiceContract en la interfaz

En mi archivo de definición de interfaz, tengo esto:

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

Entonces tengo mi archivo de clase (para el servicio) que hereda:

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

Por último, en mi proyecto anfitrión I tenga esto:

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

Todo compila bien, y cuando el host va a agregar el punto final del servicio, b Obliga con esto: "El tipo de contrato Inventory.InventoryService no se atribuye con ServiceContractAttribute. Para definir un contrato válido, el tipo especificado (ya sea una interfaz de contrato o una clase de servicio) debe atribuirse a ServiceContractAttribute. "

Sé que me falta algo simple aquí. Tengo la interfaz claramente marcada como un contrato de servicio. y hay una referencia a ese proyecto en el proyecto anfitrión

Respuesta

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

Si el atributo ServiceContract está en la interfaz no es la clase concreta, intente lo siguiente:.

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

Cuando trato que me da la ArgumentException, "ServiceHost solo es compatible s tipos de servicio de clase. " –

+0

Cambió el incorrecto - cambie la llamada AddServiceEndpoint a la interfaz, mantenga ServiceHost como clase. – Brian

+0

¡Entendido! Así que estoy instaurando ServiceHost, pasando en la clase concreta, pero estoy definiendo el punto final, o vinculante, con la interfaz, que es realmente la definición del contrato (es decir, no la clase). Eventualmente entenderé esto. Gracias Brian y Andrew. –

Cuestiones relacionadas