2012-03-25 14 views
13

tengo un servicio llamado WcfService2 (original lo sé) que tiene presentar una IService.cs con una interfaz pública:ServiceHost sólo es compatible con los tipos de servicio de clase

namespace WcfService2 
{ 
    [ServiceContract] 
    public interface IService1 
    {  
     [OperationContract] 
     [WebGet(UriTemplate = "/{value}")] 
     string GetData(string value);    
    } 
} 

entonces tengo mi clase pública Service1.svc.cs archivo que devuelve una cadena para el valor de este modo:

namespace WcfService2 
{ 
    public class Service1 : IService1 
    { 
     public string GetData(string value) 
     { 
      return string.Format("You entered: {0}", value); 
     } 
    } 
} 

ahora estoy tratando de acoger este servicio con una aplicación de consola, así:

namespace Host 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      WebHttpBinding binding = new WebHttpBinding(); 
      WebServiceHost host = 
      new WebServiceHost(typeof(IService1)); 
      host.AddServiceEndpoint(typeof(IService1), 
      binding, 
      "http://localhost:8000/Hello"); 
      host.Open(); 
      Console.WriteLine("I DONT LIKE REST!"); 
      Console.WriteLine("Press <RETURN> to KILL REST FOR GOOD"); 
      Console.ReadLine(); 
     } 
    } 
} 

Pero aparece un error después de ejecutarlo:

ServiceHost solo es compatible con los tipos de servicio de clase.

Esto obviamente se refiere a que mi IService es de tipo de interfaz pública. Pero no sé cómo crearlo, cuando creé por primera vez el WCF Service application, le proporciono los dos archivos estándar de IService y Service.svc si elimino cualquiera de ellos, y solo implemento esta solución en una clase cuando intento agregar la web. servicio en alma local no se encuentra nada.

¿Hay alguna manera de jugar con el código de host?

+0

Hay otra respuesta para tratar @ http://stackoverflow.com/q/19306395/16391 – StingyJack

Respuesta

25

me sugieren que cambie esto:

WebServiceHost host = new WebServiceHost(typeof(IService1)); 

a esto:

WebServiceHost host = new WebServiceHost(typeof(Service1)); 
+1

Recibo este error si hago eso: 'El tipo de contrato WcfService2.Service1 no se atribuye a ServiceContractAttribute. Para definir un contrato válido, el tipo especificado (ya sea la interfaz de contrato o la clase de servicio) se debe atribuir a ServiceContractAttribute. –

+1

@Garrith: No debe obtener el primer error con el código publicado. Sus divagaciones acerca de borrar archivos pueden ser parte de esto. –

+3

Cualquiera que lea esta respuesta, también vea: http://stackoverflow.com/questions/9864006/servicecontractattribute-error-on-simple-wcf-service ¡Tenga en cuenta que WebServiceHost es Service1 y AddServiceEndpoint is IService1! –

4

Debe crear WebServiceHost con la clase que implementa el servicio; Para obtener un ejemplo, lea here para obtener un ejemplo.

+0

consulte responder bajo la respuesta de Will Marcouliers. –

Cuestiones relacionadas