Ваш ServiceContract должен украшать интерфейс (контракт). ServiceHost должен размещать экземпляр этого интерфейса и находиться вне той же службы, что и хост. По крайней мере, я видел это только так.
Основная структура:
[ServiceContract]
public interface IService
{
[OperationContract]
void DoSomething(Data data);
}
[DataContract]
public class Data
{
[DataMember]
int Num {get;set;}
}
public class Service : IService
{
public void DoSomething(Data data)
{ // do something }
}
// run in any other kind of app, console, win service, winform/wpf
static void Main()
{
ServiceHost svHost = new ServiceHost(typeof(Service), new Uri("http://localhost:8080"));
BasicHttpBinding binding = new BasicHttpBinding();
svHost.AddServiceEndpoint(binding, "");
svHost.Open();
}
Еще более простое решение для запуска службы в VS2010 - это просто создать службу в новом шаблоне службы WCF. Извлеките их демонстрационный код, вставьте свой собственный код для интерфейса servicecontract и службы реализации, затем выберите debug -> run, и VS2010 разместит службу для вас без необходимости создания внешнего приложения для запуска службы. Также позволит вам отправлять данные в службу для проверки кода и возвращаемых значений ваших функций wcf в их простом приложении winforms.