C # - выставить перечислимый тип через веб-сервис - PullRequest
1 голос
/ 01 ноября 2011

Хорошо, у меня возникли серьезные проблемы при попытке выставить этот перечислимый тип через мой веб-сервис. Он не работает так же, как мои пользовательские классы, с точки зрения их показа.

ServerSide:

[DataContractAttribute]
public enum EventReportType {EventAutoContract, DailyAutoContract, EventFunctionSheet }

на стороне клиента:

// For a custom class I would do:
ServerRef.MyClass maclass = new ServerRef.MyClass();
// but the following does not work.
ServerRef.EventReportType myenum = new ServerRef.EventReportType();
enum test = new ServerRef.EventReportType();

Я не думаю, что это даже в WSDL, так как мне заставить его выставляться правильно? И как бы я его потреблял и использовал?

Пожалуйста, посмотрите и на мой другой вопрос о награде: REST с обнуляемыми типами?

Ответы [ 3 ]

6 голосов
/ 01 ноября 2011

Поскольку типом является enum, вы не создаете его экземпляры, вы получаете доступ к статическим представлениям значений.

Например,

var value = EventReportType.EventAutoContract;

Но в общем случае вы не будете присваивать значение переменной, если вам не нужно, вы просто будете использовать ее явно;скажем, вызов метода службы, который принимает значение перечисления из этого типа:

myServiceCall(EventReportType.EventAutoContract);

Обратите внимание, что вам не нужно явно указывать DataContractAttribute, это можно сократить до DataContractКроме того, вам, вероятно, требуется, чтобы каждый элемент enum также был дополнен атрибутом EnumMember.Итак ...

[DataContract]
public enum EventReportType 
{
    [EnumMember]
    EventAutoContract, 
    [EnumMember]
    DailyAutoContract, 
    [EnumMember]
    EventFunctionSheet 
}

Ссылку на использование типов перечисления в контрактах данных можно найти здесь .В конечном счете, если ваш enum правильно определен и используется где-то в сервисе, доступном для клиентской стороны, то будет сгенерирован enum.

0 голосов
/ 01 ноября 2011

Я не нашел ни одного атрибута, который бы выставлял класс или перечисление в wsdl напрямую.Единственный метод, который я нашел до сих пор, - это включить его в качестве параметра или типа возврата веб-метода - что-то наподобие:

[WebMethod]
public myEnum ExposeEnum()
{
    return myEnum.DefaultValue;
}

Это, по крайней мере, заставит его появиться в wsdl.

0 голосов
/ 01 ноября 2011

Как опубликовано ранее в Stackoverflow:

Использование общей библиотеки должно быть в порядке. Перечисления являются сериализуемыми, и атрибуты DataContract не нужны.

См .: http://msdn.microsoft.com/en-us/library/ms731923.aspx

"Типы перечислений. Перечисления, включая перечисления флагов, являются сериализуемыми. При желании типы перечисления могут быть помечены атрибутом DataContractAttribute, и в этом случае каждый член, участвующий в сериализации, должен быть помечен атрибутом EnumMemberAttribute"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...