WCF ServiceContract и проблема svcutil

У меня есть публичный интерфейс, автоматически сгенерированный bu svcutil:

[System.ServiceModel.ServiceContractAttribute(Namespace="...", ConfigurationName="...")]
public interface MyInterface

Затем у меня есть веб-служба asmx, наследующая его и работающая нормально. Я пытаюсь преобразовать его в WCF, но когда я инструментирую службу (в коде asmx.cs) с помощью ServiceContract:

[ServiceContract(Namespace = "...")]
public class MyService : MyInterface 

Также я создал файл .svc и добавил параметр system.serviceModel в файл конфигурации. Цель состоит в том, чтобы перенести службу asmx в службу WCF.

У меня такая ошибка:

Класс обслуживания типа MyService определяет ServiceContract и наследует ServiceContract от типа MyInterface. Наследование контракта можно использовать только среди типов интерфейсов. Если класс отмечен атрибутом ServiceContractAttribute, он должен быть единственным типом в иерархии с атрибутом ServiceContractAttribute.

Служба asmx все еще работает нормально. Только .svc вызывает у меня проблемы. Мой вопрос в том, как это исправить. MyInterface - это интерфейс, поэтому я не понимаю, в чем проблема и почему у меня все равно возникает ошибка.

Примечание. Я не хочу изменять MyInterface, потому что он автоматически создается из svcutil из моей схемы wsdl, и я не хочу, чтобы этот интерфейс редактировался вручную. Вся идея состоит в том, чтобы типы сервисов автоматически генерировались из WSDL, и чтобы моя команда разработчиков экономила усилия при ручном редактировании.

Любая помощь приветствуется.


person Valko    schedule 21.04.2010    source источник


Ответы (1)


Вам нужно удалить ServiceContractAttribute из класса MyService. Этот атрибут уже определен в интерфейсе, и это правильный способ указать, что этот интерфейс будет отображаться как служба WCF.

person Darin Dimitrov    schedule 21.04.2010
comment
спасибо за ответ, чему я научил, но когда я удаляю контракт службы, у меня возникает эта ошибка: имя контракта «MyService» не может быть найдено в списке контрактов, реализованных службой «MyService». - person Valko; 21.04.2010
comment
теперь он работает, просто неправильное имя контракта в моем файле конфигурации, поэтому спасибо за помощь :-) - person Valko; 21.04.2010