Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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. Создать файл с допустимым местным временем использования веб службы, например такой.

<?xml version="1.0" encoding="utf-8"?><TimeIntervals> <TimeInterval Inverse="true" From="09:00:00" To="20:00:00" /> <TimeInterval Inverse="false" From="13:00:00" To="13:30:00" /></TimeIntervals>

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 класса веб службы.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных