WCF: Представление свойств DataMember только для чтения без набора?

Едва ли неясный, но одна из функций I абсолютно любовь является заполнением клавишей Tab.
Действительно полезный, когда Вы перемещаетесь по канавке вся структура поддерева, или когда Вы используете, некоторые затеняют, или долгая команда!

59
задан Community 23 May 2017 в 12:10
поделиться

4 ответа

На самом деле ваш "серверный" класс не будет "доступен" для клиента.

Происходит следующее: на основе контракта данных клиент создаст новый отдельный класс из XML-схемы сервиса. Он не может использовать серверный класс как таковой!

Он воссоздает новый класс из определения схемы XML, но эта схема не содержит ничего из специфических для .NET вещей, таких как видимость или модификаторы доступа - в конце концов, это просто XML-схема. Клиентский класс будет создан таким образом, чтобы он имел такой же «след» на проводе - например, он, в основном, сериализуется в один и тот же формат XML.

Вы не можете «транспортировать». Ноу-хау .NET о классе через стандартную службу на основе SOAP - в конце концов, все вы

49
ответ дан 24 November 2019 в 18:31
поделиться

поместите атрибут DataMember в поле, а не свойство .

Помните мысль, что WCF не знает инкапсуляции. Инкапсуляция - это термин ООП, а не термин SOA.

Тем не менее, помните, что поле будет доступно только для чтения для людей, использующих ваш класс - любой, кто использует сервис, будет иметь полный доступ к полю на своей стороне.

10
ответ дан 24 November 2019 в 18:31
поделиться

Определите контракт на обслуживание (интерфейс) Перед реализацией контракта с использованием класса.

-3
ответ дан 24 November 2019 в 18:31
поделиться

У меня были некоторые свойства класса на моем уровне обслуживания, которые я хотел передать Silverlight. Я не хотел создавать совершенно новый класс.

Не совсем «рекомендуется», но это казалось меньшим из двух зол, чтобы передать свойство Total Silverlight (исключительно для визуальной привязки данных).

public class PricingSummary
{
    public int TotalItemCount { get; set; } // doesnt ideally belong here but used by top bar when out of store area

    public decimal SubTotal { get; set; }
    public decimal? Taxes { get; set; }
    public decimal Discount { get; set; }
    public decimal? ShippingTotal { get; set; }
    public decimal Total
    {
        get
        {
            return + SubTotal
                   + (ShippingTotal ?? 0)
                   + (Taxes ?? 0)
                   - Discount;
        }
        set
        {
            throw new ApplicationException("Cannot be set");
        }
    }
}
7
ответ дан 24 November 2019 в 18:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: