Ошибка ServiceKnownType при использовании перечисления в качестве аргумента возврата - PullRequest
0 голосов
/ 12 февраля 2020

Я создал службу WCF, которая использует некоторое перечисление.
Пока все хорошо, перечисление кажется сериализованным, как и ожидалось.
Однако сериализация становится проблемой, если интерфейс к объекту использует это перечисление как возвращаемый аргумент.
В этом случае я получаю типичное значение:

OnStart: ошибка бла, произошла ошибка при загрузке атрибута 'ServiceKnownTypeAttribute' ...

Немного кода:

Мое перечисление:

namespace Something
{
   public enum SomeEnum
   {
       // Success
       Success = 0,

       // Failure
       Failure= 1
   }
}

Класс в моем сервисе:

[DataContract]
[KnownType(typeof(SomeEnum))]
public abstract class BaseModule : IModule
{
    public SomeEnum Initialize()
    {
      return SomeEnum.Success;
    }
}

Его интерфейс:

public interface IModule
{
    SomeEnum Initialize();     // Removing this line solves the problem (but I need it for casting)
}

Теперь класс, вызываемый службой - уровень A:

public class SomeClass
{
   public IModule GetModule(string moduleName)
   {            
   }
 }

Обратите внимание, что я пытался решить эту проблему, добавив перечисления [DataContract] и [EnumMember], но не сработал, как ожидалось. так как это не нужно в любом случае.

РЕДАКТИРОВАТЬ

Сервисный интерфейс:

[ServiceContract(Namespace = "http://MyService.Service", CallbackContract = typeof(IMyServiceCallback))]
[ServiceKnownType(typeof(SomeEnum))]    // I have tried with this line placed either here or before the method below
public interface IMyService
{
    [OperationContract]
    [ServiceKnownType(typeof(SomeEnum))]
    [ServiceKnownType(typeof(BaseModule))]
    IModule GetModule(string moduleName);
}
...