ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Механизм для реализации нестандартной проверки подлинности в WSEВ качестве примера использования расширяемой архитектуры веб служб на основе ASP. NET представлено расширение WSE, которое ограничивает доступ к веб службе некоторым интервалом времени (например только с 10 часов вечера до 8 утра). Данному расширению достаточно создать единственный фильтр SOAP – входящий фильтр сервера. Далее приведен исходный текст сборки с расширением, унаследованным от абстрактного класса Microsoft.Web.Services3.Design.PolicyAssertion. // TimeAssertion.csusing System;using System.IO;using System.Reflection;using System.Xml;using System.Xml.Serialization;using System.Collections.Generic; using Microsoft.Web.Services3;using Microsoft.Web.Services3.Design;using Microsoft.Web.Services3.Security; [assembly:AssemblyVersionAttribute("1.0.0.0")] namespace Seva.WS.Assertions{ public class TimeAssertion: PolicyAssertion { private TimeIntervals intervals; public TimeAssertion(): base() { intervals = null; }В методе ReadXml расширение должно считать свои параметры из файла политики. Единственным параметром расширения будет атрибут с именем файла с разрешенным интервалом времени. public override void ReadXml(XmlReader reader, IDictionary<string, Type> extensions){ string fileName = reader.GetAttribute("file"); if (fileName == null)throw new Exception("Attribute 'file' not found in policy"); // Обязательная операция - переход к следующему тегу в файле политики, // иначе данный элемент будет читаться бесконечно reader.Read(); // Чтение файла с интервалами времени доступности службы using (StreamReader timeReader = new StreamReader(fileName)) {XmlSerializer serializer = new XmlSerializer(typeof(TimeIntervals));intervals = (TimeIntervals) serializer.Deserialize(new XmlTextReader(timeReader)); }}Класс TimeIntervals содержит метод проверки принадлежности времени заданному интервалу. [XmlRoot("TimeIntervals")] public class TimeIntervals: List<TimeInterval> { public TimeIntervals() { } public bool Check(DateTime Time) { foreach (TimeInterval interval in this) if (interval.Check(Time)) return true; return false; } }}Для использования данной политики нужно выполнить следующие действия. 1. Создать файл с допустимым местным временем использования веб службы, например такой. 2. Создать файл wse3policyCache.config на сервере со следующим содержанием (для простоты предполагается отсутствие иных политик, также следует указать реальное значение публичного ключа сборки с созданным расширением WSE). <policies xmlns="http://schemas.microsoft.com/wse/2005/06/policy"> <extensions> <extension name="timeIntervals" type="Seva.WS.Assertions.TimeAssertion, Seva.WS.TimeAssertion, Version=1.0.0.0, Culture=neutral, PublicKeyToken=..." /> </extensions> <policy name="MyServicePolicy"> <timeIntervals file="C:\Inetpub\wwwroot\timeschema.config" /> </policy> </policy></policies>Вместо MyServicePolicy должно быть указано название политики, указанной в атрибуте Policy класса веб службы.
Не нашли, что искали? Воспользуйтесь поиском:
|