У меня есть приложение для мониторинга, которое получает обновления обработки из других приложений через WCF. Раньше наблюдаемые приложения имели один класс «обновления» для отправки данных в приложение мониторинга. Сейчас я пишу абстрактный базовый класс, который выглядит как этотWCF DataContract для абстрактного базового класса и его подклассов
public abstract class Update
{
public readonly DateTime TimeStamp;
public readonly int AppId;
public Update()
{
TimeStamp = DateTime.Now;
AppId = SomeMethodThatCalculatesId();
}
private int SomeMethodThatCalculatesId()
{
// my calculations ...
}
}
Вот пример подкласс
public class ProcessUpdate : Update
{
public readonly string ProcessMessage;
public ProcessUpdate(string processMessage) : base()
{
if (string.IsNullOrEmpty(processMessage))
{
throw new ArgumentNullException("processMessage");
}
ProcessMessage = processMessage;
}
}
Я хочу, чтобы иметь возможность отправить мониторинг приложения ничего производного от Update
и хотят, чтобы предотвратить обновление от создания экземпляра, поэтому он абстрактный. Я хочу одну реализацию для своего поколения AppId и для производных классов не беспокоиться об этом или изменять его, поэтому AppId - только для чтения.
Нужно ли Update
атрибут тега атрибута DataContract
или требуется только для моих подклассов? Если это так, могу ли я по-прежнему украшать TimeStamp
и AppId
с DataMemeber
без DataContract
и все еще получать доступ к этим свойствам в приложении мониторинга?
Итак, если я получу это правильно, Update и ProcessUpdate необходимо DataContract. Хотя IUpdate понадобится DataMember для своих свойств. Это верно? – jlafay
Или я мог бы просто украсить ProcessUpdate с помощью DataContract, так как Update никогда не пройдет через провод. – jlafay