ServiceHost поддерживает только типы классов обслуживания - PullRequest
14 голосов
/ 25 марта 2012

У меня есть служба с именем WcfService2 (оригинал, которую я знаю), которая имеет файл IService.cs с открытым интерфейсом:

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

Затем у меня есть файл общедоступного класса Service1.svc.cs, который возвращает строку для значения следующим образом:

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

Я сейчас пытаюсь разместить этот сервис с консольным приложением, например:

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

Но я получаю ошибку после запуска:

ServiceHost поддерживает только типы классов обслуживания.

Так что это, очевидно, связано с тем, что мой IService имеет открытый тип интерфейса. Но я не знаю, как еще его создать, когда я впервые создал WCF Service application, он дает вам два стандартных файла IService и Service.svc, если я удаляю либо, либо, и реализую это решение только в одном классе, когда я пытаюсь добавить веб-сервис в локальной душе ничего не найдено.

Есть ли способ поиграть с кодом хоста?

Ответы [ 2 ]

29 голосов
/ 26 марта 2012

Я предлагаю вам изменить это:

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

на это:

WebServiceHost host = new WebServiceHost(typeof(Service1));
4 голосов
/ 26 марта 2012

Вы должны создать WebServiceHost с классом, реализующим сервис;

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

Прочитайте здесь для примера.

...