Wcf - скрытие свойств? - PullRequest
       7

Wcf - скрытие свойств?

0 голосов
/ 17 января 2011

У меня есть класс, который выглядит примерно так ....

[DataContract]
public partial class Area : ModelBase
{
    private String name;
    private Guid floorId;
    private Guid areaTypeId;
    private int assetCount;

    [DataMember] 
    public String Name
    {
        get { return name; }
        set { name = value; }
    }

    [DataMember] 
    public Guid FloorId
    {
        get { return floorId; }
        set { floorId = value; }
    }

    public Guid AreaTypeId
    {
        get { return areaTypeId; }
        set { areaTypeId = value; }
    }
}

.... и у меня есть Wcf Service Library, в которой определен следующий интерфейс ...

 IEnumerable<Area> GetSomeStuff(IEnumerable<Area> uploadedAreas);

Все это работает просто отлично, но в моем клиентском приложении (компактном каркасном приложении) открыто свойство AreaTypeId?

Я подумал, что если я не добавлю [DataMember] атрибут это не будет видно клиенту?Что я не понимаю ???

Спасибо,

ETFairfax

Ответы [ 2 ]

1 голос
/ 23 мая 2012

Если вы хотите скрыть какое-либо свойство от клиента, просто добавьте атрибут [IgnoreDataMember] к этому свойству.

0 голосов
/ 17 января 2011

Если вы разделяете сборку типов между клиентом и сервером, она будет видна, если вы не отключите повторное использование типов из ссылочных сборок (нажмите «Настроить ссылку на службу» на прокси-сервере).

Если вы не публикуете сборку, она не будет видна, потому что код для класса генерируется на основе открытого контракта (вы можете увидеть его, включив Показать все файлы в VS, а затем перейдите к созданному файлу Reference.cs вслужебный прокси).

DataMember является атрибутом для DataContractSerializer , поэтому при совместном использовании сборки свойство не будет сериализовано на сервере и не будет инициализировано на клиенте, но будет отображаться. Ссылка

...