Служба WCF - время выполнения, не видя ServiceContract на интерфейсе

Я новичок в WCF и пытаюсь запустить свой первый сервис. Я близко, но застрял в этой проблеме.

В моем файле определения интерфейса у меня есть следующее:

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

Затем у меня есть свой файл класса (для службы), который наследует его:

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

Наконец, в моем проекте Host у меня есть следующее:

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

Все компилируется в порядке, и когда хост переходит к добавлению конечной точки службы, он бомбит это: "Тип контракта Inventory.InventoryService не относится к ServiceContractAttribute. Чтобы определить действительный контракт, указанный тип (либо контракт интерфейс или класс службы) должны быть отнесены к ServiceContractAttribute."

Я знаю, что мне не хватает чего-то простого здесь. У меня есть интерфейс, четко обозначенный как контракт на обслуживание, и там ссылка на этот проект в проекте Host.

Ответы

Ответ 1

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

Если ваш атрибут ServiceContract находится на интерфейсе не в конкретном классе, попробуйте следующее:

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