2012-03-25 10 views
13

ho un servizio denominato WcfService2 (originale lo so), che ha presentare un'IService.cs con un'interfaccia pubblica:ServiceHost supporta solo i tipi di servizio di classe

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

poi ho la mia classe pubblica Service1.svc.cs File che restituisce una stringa per il valore in questo modo:

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

ora sto cercando di ospitare questo servizio con una console app in questo modo:

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(); 
     } 
    } 
} 

Ma ho ricevuto un errore dopo l'esecuzione:

ServiceHost supporta solo i tipi di servizio di classe.

Quindi questo ovviamente si riferisce al fatto che il mio IService sia di tipo di interfaccia pubblica. Ma non so in quale altro modo per crearlo, quando ho creato lo WCF Service application per la prima volta ti ho dato i due file standard di IService e Service.svc se cancello o, e solo implemento questa soluzione in una classe quando provo ad aggiungere il web servizio nell'anima locale non si trova nulla.

C'è un modo per armeggiare con il codice host?

+0

c'è un'altra risposta per provare @ http://stackoverflow.com/q/19306395/16391 – StingyJack

risposta

25

suggerisco che si modifica questa:

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

a questo:

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

Viene visualizzato questo errore se lo faccio: 'Il tipo di contratto WcfService2.Service1 non è attribuito con ServiceContractAttribute. Per definire un contratto valido, il tipo specificato (o interfaccia del contratto o classe di servizio) deve essere attribuito a ServiceContractAttribute. –

+1

@Garrith: Non si dovrebbe ottenere il primo errore con il codice pubblicato. Le tue divagazioni sull'eliminazione di file possono avere un ruolo in questo. –

+3

Chiunque legga questa risposta può anche vedere: http://stackoverflow.com/questions/9864006/servicecontractattribute-error-on-simple-wcf-service Becares come WebServiceHost è Service1 e AddServiceEndpoint is IService1! –

4

È necessario creare WebServiceHost con la classe che implementa il servizio;

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

Leggi here per un esempio.

+0

vedere risposta sotto Will risposta di Marcouliers. –