Совместимость с ASP.NET
В примере ASPNetCompatibility показано, как включить режим совместимости ASP.NET в Windows Communication Foundation (WCF). Службы, работающие в режиме совместимости ASP.NET, полностью участвуют в конвейере приложений ASP.NET и могут использовать такие функции ASP.NET, как авторизация файла или URL-адреса, состояние сеанса и HttpContext класс. Класс HttpContext позволяет получить доступ к файлам cookie, сеансам и другим функциям ASP.NET. Для этого режима требуется, чтобы привязки использовали транспорт HTTP, а сами службы были размещены в службах IIS.
В этом примере клиентом является консольное приложение (как исполняемый файл), а служба размещается в службах IIS.
Примечание.
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела.
Для выполнения этого примера требуется платформа .NET Framework 4 пула приложений. Чтобы создать новый пул приложений или изменить пул приложений по умолчанию, выполните следующие шаги.
Откройте панель управления. Откройте приложение Администратор istrative Tools под заголовком Системы и безопасности. Откройте апплет диспетчера службы IIS (IIS).
Разверните представление дерева в области Подключение ions. Выберите узел пулов приложений.
Чтобы задать пул приложений по умолчанию для использования платформа .NET Framework 4 (что может привести к проблемам несовместимости с существующими сайтами), щелкните правой кнопкой мыши элемент списка DefaultAppPool и выберите "Базовый" Параметры.... Установите для версии .Net Framework раскрывающийся список .Net Framework версии 4.0.30128 (или более поздней версии).
Чтобы создать пул приложений, использующий платформа .NET Framework 4 (для сохранения совместимости для других приложений), щелкните правой кнопкой мыши узел пулов приложений и выберите "Добавить пул приложений...". Присвойте новому пулу приложений имя и установите для версии .Net Framework значение .Net Framework версии 4.0.30128 (или более поздней версии). Выполнив приведенные ниже действия по настройке, щелкните правой кнопкой мыши приложение ServiceModelSamples и выберите пункт "Управление приложением", "Дополнительно Параметры...". Задайте пул приложений новому пулу приложений.
Этот пример основан на начале работы, который реализует службу калькулятора. Контракт ICalculator
был изменен в соответствии с контрактом ICalculatorSession
, чтобы можно было выполнять набор операций с сохранением промежуточного результата.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculatorSession
{
[OperationContract]
void Clear();
[OperationContract]
void AddTo(double n);
[OperationContract]
void SubtractFrom(double n);
[OperationContract]
void MultiplyBy(double n);
[OperationContract]
void DivideBy(double n);
[OperationContract]
double Result();
}
Благодаря использованию возможности служба поддерживает состояние клиента во время вызова нескольких операций для вычислений. Клиент может извлечь текущий результат путем вызова метода Result
и очистить результат (сделать его равным нулю) путем вызова метода Clear
.
Служба использует сеанс ASP.NET для хранения результата для каждого клиентского сеанса. Это позволяет службе поддерживать промежуточный результат для каждого клиента по мере множественных вызовов службы.
Примечание.
ASP.NET состояния сеанса и сеансы WCF очень разные. Дополнительные сведения о сеансах WCF см. в разделе "Сеансы ".
Служба имеет интимную зависимость от состояния сеанса ASP.NET и требует правильной работы режима совместимости ASP.NET. Такие требования выражаются декларативно путем применения атрибута AspNetCompatibilityRequirements
.
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Required)]
public class CalculatorService : ICalculatorSession
{
double Result
{ // store result in AspNet Session
get {
if (HttpContext.Current.Session["Result"] != null)
return (double)HttpContext.Current.Session["Result"];
return 0.0D;
}
set
{
HttpContext.Current.Session["Result"] = value;
}
}
public void Clear()
{
Result = 0.0D;
}
public void AddTo(double n)
{
Result += n;
}
public void SubtractFrom(double n)
{
Result -= n;
}
public void MultiplyBy(double n)
{
Result *= n;
}
public void DivideBy(double n)
{
Result /= n;
}
public double Result()
{
return Result;
}
}
При выполнении примера запросы и ответы операций отображаются в окне консоли клиента. Чтобы закрыть клиент, нажмите клавишу ВВОД в окне клиента.
0, + 100, - 50, * 17.65, / 2 = 441.25
Press <ENTER> to terminate client.
Настройка, сборка и выполнение образца
Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.
Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Building the Windows Communication Foundation Samples.
После создания решения запустите Setup.bat, чтобы настроить приложение ServiceModelSamples в IIS 7.0. Каталог ServiceModelSamples теперь должен отображаться как приложение IIS 7.0.
Чтобы запустить пример в конфигурации с одним компьютером или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".