Служба WCF с наследованием классов - PullRequest
0 голосов
/ 10 января 2012

У меня есть служба WCF, которая использует иерархию классов. Базовый класс BaseService содержит только базовую информацию (рисунок), а унаследованный класс содержит расширенную информацию. Одним из свойств Сервиса является enum. BaseService имеет атрибут DataContract, установленный с атрибутом KnownType, указывающим на Service.

Одна из служб возвращает список BaseService, но когда я вызываю его, я получаю сообщение об ошибке от WCF. Я включил журнал и вижу, что ошибка связана с тем, что enum в Service не установлен. Служба возвращает не список Служб, а список BaseService, поэтому перечисление не должно соответствовать контексту. Кажется, что WCF пытается вернуть список Service, хотя метод возвращает список BaseService.

Сообщение об ошибке: Произошла ошибка при попытке сериализации параметра http://tempuri.org/:GetShallowServiceResult. Сообщение InnerException «Enum value» 0 недопустимо для типа «MyService.ServiceTypeEnum» и не может быть сериализовано

Я не могу понять, почему это происходит?

UPDATE: Оказалось, что я пропустил изменение конструктора на использование класса BaseService вместо унаследованного класса Service. То, что WebService пытался сериализовать какое-то перечисление, которое не было установлено. Теперь работает как шарм.

Ответы [ 2 ]

1 голос
/ 10 января 2012

Как вы объявили свой enum?Использовали ли вы следующий шаблон?

public enum MyEnumeration
{
   [EnumMember]
   Value0 = 0,

   [EnumMember]
   Value1 = 1,

   [EnumMember]
   Value2 = 2
}

Атрибут [DataContract] необязателен для перечислений, кстати.

0 голосов
/ 10 января 2012

Вам необходимо добавить все включенные перечисления, которые будут сериализованы в объявлении ServiceKnownType.

[ServiceContract]
[ServiceKnownType(typeof(MyEnum))]
public interface IMyService
{
    [OperationContract]
    ServiceMethod(MyEnum enom);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...