public override SoapFilter CreateClientInputFilter( FilterCreationContext
public override SoapFilter CreateClientInputFilter( FilterCreationContext context) { return null; }
public override SoapFilter CreateClientOutputFilter( FilterCreationContext context) { return null; }
public override SoapFilter CreateServiceInputFilter( FilterCreationContext context) { return new CheckTimeFilter(intervals, context); }
public override SoapFilter CreateServiceOutputFilter( FilterCreationContext context) { return null; } }
Класс фильтра унаследован от Microsoft.Web.Services3.SoapFilter и хранит в себе список разрешенных интервалов. Это не лучшее решение, но оно позволяет сократить пример и не привязывать его к использованию баз данных.
public class CheckTimeFilter : SoapFilter { private TimeIntervals intervals;
public CheckTimeFilter(TimeIntervals intervals, FilterCreationContext context) { this.intervals = intervals; }
ProcessMessage – основной метод класса, обрабатывающий пакет SOAP. В данном примере в нем нет нужды анализировать содержимое пакета SoapEnvelope.
public override SoapFilterResult ProcessMessage(SoapEnvelope envelope) { if (! intervals.Check(DateTime.Now)) throw new Exception("Service is unavailable now."); return SoapFilterResult.Continue; } }
Класс TimeInterval содержит в себе интервал времени в течении суток. Тип TimeSpan, в отличие от DateTime, не относится к примитивным и не может быть напрямую сохранен в атрибуте XML, поэтому приходится использовать некоторый обходной путь для автоматической сериализации объекта этого класса в строку удобного вида, такую как следующая.
<TimeInterval Inverse="false" From="09:00:00" To="10:30:00" />
Для сериализации в указанный вид можно либо реализовать чтение из XML самостоятельно, либо использовать дополнительные свойства сдля XML сериализации.
[Serializable] public class TimeInterval { [XmlAttribute("From")] public string FromField { set {From = TimeSpan.Parse(value);} get {return From.ToString();} }
[XmlAttribute("To")] public string ToField { set {To = TimeSpan.Parse(value);} get {return To.ToString();} }
[XmlAttribute("Inverse")] public bool Inverse;
[XmlIgnore] public TimeSpan From;
[XmlIgnore] public TimeSpan To;
public bool Check(DateTime Time) { bool result = (From <= Time.TimeOfDay) && (Time.TimeOfDay <= To); if (Inverse) result = ! result;
return result; } }
Класс TimeIntervals содержит метод проверки принадлежности времени заданному интервалу.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий