WCF - любой способ пометить атрибут как проигнорированный? - PullRequest
0 голосов
/ 31 мая 2011

В основном, если у меня есть следующее:

[DataContract]
public class Foo
{
    [MyCustomAttribute(...)]
    [DataMember(IsRequired = true)]
    public int bar { get; set; }
}

Как получить, чтобы MyCustomAttribute игнорировалось, когда пользователь генерирует класс с помощью "Добавить ссылку на службу ..."

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

[DataContract]
public class Foo
{
    [DataMember(IsRequired = true)]
    public int bar { get; set; }
}

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

Нет способа в включить ваши атрибуты в код, сгенерированный клиентами

Ссылка: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/ce241118-bc79-4788-a739-c445a52fcd1d

1 голос
/ 31 мая 2011

[DataMember] является частью механизма сериализации и поэтому необходим. Причина, по которой вы видите это в прокси, заключается в том, что прокси использует тот же DataContractSerializer, что и служба. Если для IsRequired установлено значение true, прокси-сервер может определить, возможно ли отправить клиента (если задано требуемое значение) или нет.

Из WSDL можно определить, требуется ли свойство или нет, поэтому DataMemberAttribute устанавливается на основе файла WSDL; не исходный код сервиса. Прокси-серверы по умолчанию создаются полностью из описаний сервисов, доступных в сети. И, как упоминают другие ответы, вы наверняка не получите свои собственные атрибуты, скопированные на прокси.

0 голосов
/ 31 мая 2011

Одной из возможностей было бы создание интерфейса и размещение атрибута в методах интерфейса.

Вы можете запросить интерфейс вместо конкретного класса, но WCF увидит только конкретную реализацию класса.

Можно сказать:

 [DataContract] 
 public class Foo : IFoo
 {
     [DataMember(IsRequired = true)]
     public int bar { get; set; } 
 }

 public interface IFoo 
 {
     [MyCustomAttribute(...)]
     int bar { get; set; } 
 }
...