Сервис WCF - среда выполнения не видит ServiceContract в интерфейсе - PullRequest
15 голосов
/ 27 февраля 2009

Я новичок в 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 Ответ

25 голосов
/ 27 февраля 2009
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();
...