Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Литвинов / Лабораторна робота 3.doc
Скачиваний:
30
Добавлен:
23.03.2015
Размер:
2.29 Mб
Скачать

Властивість CacheDuration

Завдяки використанню кешування в web-службах підвищується їх масштабованість і продуктивність. Простий спосіб реалізувати систему кешування полягає в застосуванні властивості CacheDuration атрибуту WebMethod. Такий тип кешування називається кешуванням результатів і в середовищі .NET виконується шляхом збереження на наперед встановлений час відповідних пар запитів і відповідей в кеш-таблиці, яка знаходиться в пам'яті. Протягом цього часу на будь-який поступаючий запит, співпадаючий із запитом, що вже є в кеші, сервер видає кешовану відповідь. Властивість CacheDuration служить для задання кількості секунд (значення цілого типу), впродовж яких пара запит-відповідь зберігатиметься в кеші. За умовчанням це значення рівне 0, тобто відповіді не кешується.

Механізм кешування часто виявляється ідеальним засобом для web-методів, які обробляють запити, інтенсивно використовуючі процесор, або інші складні запити, що вимагають незначної зміни раніше одержаних результатів. До числа подібних web-методів, наприклад, відноситься метод, який запитує з бази даних щодня змінні заголовки новин. У вказаному випадку для зниження кількості звернень до бази даних можна встановити властивість CacheDuration цього методу рівним п'яти або більш хвилинам. Оскільки система кешування грунтується на парі запит-відповідь, то у разі, коли діапазон вхідних параметрів методу невеликий, певні ресурси серверу використовуються в багатьох аналогічних ситуаціях. Якщо діапазон вхідних параметрів великий (тобто запит включає безліч рядків), кеш кеш-таблиці може вирости настільки, що займе великий об'єм пам'яті, а це, у свою чергу, може привести до втрати важливих даних. Ситуація посилюється, якщо об'єм вихідних даних, що зберігаються в кеші, також великий.

[WebMethod(Description = "Number of times this service has been accessed", CacheDuration = 60, MessageName = "ServiceUsage")]

public int ServiceUsage()

{

// If the XML Web service has not been accessed, initialize it to 1.

if (Application["MyServiceUsage"] == null)

{

Application["MyServiceUsage"] = 1;

}

else

{

// Increment the usage count.

Application["MyServiceUsage"] = ((int)Application["MyServiceUsage"]) + 1;

}

// Return the usage count.

return (int)Application["MyServiceUsage"];

}

Встановлюється рівною одної хвилині.

Властивість TransactionOption

Транзакції можна представити як якийсь набір процедур (подій, викликів функцій і т. п.), виконання яких приводить до певної зміни стану (як у разі успішного завершення необхідних процедур, так і у разі збою якої-небудь з них). Як приклад можна привести систему обробки кредитних карток, яка аутентіфікує номер кредитної картки, знімає з рахунку гроші (якщо вони є) і здійснює фіксацію транзакції. Кожна з цих трьох операцій є частиною транзакції. Якщо на якому-небудь з етапів відбувається збій (наприклад, картка недійсна), вся транзакція відміняється, а змінені дані відновлюються.

Компанія Microsoft включила підтримку транзакцій, подібних транзакціям MTS і СОМ+, в платформу .NET за допомогою простору імен System. EnterpriseServices. Підтримка транзакцій .NET задається властивістю TransactionOption атрибуту WebMethod. Ця властивість може мати одне з наступних п'яти значень:

Disabled;

NotSupported;

Supported;

Required;

RequiresNew.

За замовчанням транзакції відключені. Якщо все ж таки потрібно використовувати .NET-транзакпии, тоді web-метод братиме участь в транзакціях тільки як кореневий об'єкт. Це означає, що метод зможе викликати інші доступні для транзакцій об'єкти, але його не можна буде викликати як частину транзакції, початої іншим об'єктом. Дане обмеження обумовлене тим, що протокол HTTP за своєю природою є stateless-протоколом, тобто не зберігає попередній стан. В результаті значення Required і RequiresNew властивості Transaction-Option виявляються еквівалентними і оголошують метод RequiresNew, який починає нову транзакцію. Значення, що залишилися, - Disabled, NotSupported і Supported - відключають транзакції для web-методу.

http://www.codeguru.com/Csharp/Csharp/cs_network/internetweb/article.php/c7789__3/

alter Procedure AddUser

(

@login nvarchar(50),

@password nvarchar(50),

@active int,

@usertypeid int,

@id int out

)

as

set nocount on

insert into [user]

([login], [password], [usertypeid], [active] )

values

(@login,@password, @usertypeid, @active)

select @id = @@identity

GO

Приклад роботи транзакцій: додавання користувачів – всі або ніхто.

[WebMethod(false, TransactionOption.Required)]

public int AddUser(String login, String password, int active)

{

try

{

int Id = userManager.AddUser(login, password, active);

return Id;

}

catch (Exception ex)

{

throw new Exception(ex.Message, ex);

}

}

[WebMethod(false, TransactionOption.Required)]

public bool AddUserCollection(List<User> userCollection)

{

try

{

foreach(User user in userCollection)

{

AddUser(user.Login, user.Password, user.Active);

}

return true;

}

catch (Exception e)

{

throw e;

}

}