2009-02-26 5 views
15

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

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

[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"; 
     } 

Наконец, в мой хозяин проекта I У меня есть следующее:

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

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

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

ответ

25
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(); 
+0

Когда я пытаюсь что это дает мне ArgumentException, «Только сервисная поддержка» s ». –

+0

Переключить неверный - изменить вызов AddServiceEndpoint на интерфейс, сохранить ServiceHost как класс. – Brian

+0

Получил! Поэтому я создаю ServiceHost, передавая конкретный класс, но я определяю конечную точку или привязку к интерфейсу, который действительно является определением контракта (т. Е. Не классом). В конце концов, я получу это. Спасибо Брайан и Эндрю. –

 Смежные вопросы

  • Нет связанных вопросов^_^