Ошибка ServiceKnownType при использовании перечисления в качестве возвращаемого аргументаC#

Место общения программистов C#
Ответить
Anonymous
 Ошибка ServiceKnownType при использовании перечисления в качестве возвращаемого аргумента

Сообщение Anonymous »

Я создал службу WCF, которая использует некоторое перечисление.

Пока все хорошо, перечисление, похоже, сериализуется, как и ожидалось.

Однако сериализация становится проблемой если интерфейс объекта использует это перечисление в качестве возвращаемого аргумента.

В этом случае я получаю типичное сообщение:


OnStart: ошибка bla, Произошла ошибка при загрузке атрибут
'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)
}


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

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);
}


Подробнее здесь: https://stackoverflow.com/questions/601 ... n-argument
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»