Я создал службу 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);
}