Я хочу выставить перечислимые атрибуты клиентскому приложению WCF, но я могу только видеть перечислимые значения.
Вот перечисление:
public enum TemplateType
{
[EnumDescription("Property Particulars")]
[EnumValue("PropertyParticulars")]
PropertyParticulars = 1,
[EnumDescription("Short Format Lists")]
[EnumValue("ShortFormatLists")]
ShortFormatLists,
[EnumDescription("Client Letters")]
[EnumValue("ClientLetters")]
ClientLetters,
[EnumDescription("Labels")]
[EnumValue("Labels")]
Labels
}
Как я могу выставить атрибуты Описания и Значения?
Можно выставлять перечисления из службы, но атрибуты перечисления не сериализуются, когда они передаются по проводу. Это означает, что потребители этого перечисления будут видеть только само перечисление и ни один из ваших атрибутов.
Вам необходимо оформить перечисление атрибутом DataContract
, а значения атрибутом EnumMember
, чтобы ваша информация была сериализована, но это позволит вам указать только базовое значение каждого значения перечисления, а не его описание.
Я не совсем разбираюсь в спецификациях, но сомневаюсь, что у такого рода метаданных есть эквивалентное представление в WSDL. Таким образом, это не будет видно на клиентской стороне, если вы сгенерируете типы в вашем прокси.
Однако, если вы поместите все ваши DataContracts в отдельную сборку, на которую вы ссылаетесь в клиенте, вы можете повторно использовать эти типы на клиентской стороне. В этом случае атрибуты будут видны. "Типы повторного использования в связанных сборках" должны быть проверены для вашей Ссылки на сервис, но по умолчанию она включена.
Здесь короткая заметка в блоге об этом. Я уверен, что есть и другие...