Поделиться через


совместимость 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. Чтобы создать пул приложений или изменить пул приложений по умолчанию, выполните следующие действия.

  1. Откройте панель управления. Откройте приложение "Администрирование" в заголовке "Система и безопасность ". Откройте приложение диспетчера IIS .

  2. Разверните представление дерева в области "Подключения ". Выберите узел Пулы приложений.

  3. Чтобы задать пул приложений по умолчанию для использования .NET Framework 4 (что может привести к проблемам несовместимости с существующими сайтами), щелкните правой кнопкой мыши элемент списка DefaultAppPool и выберите "Базовые параметры".. Установите раскрывающийся список .Net Framework версия на .Net Framework v4.0.30128 (или более позднюю).

  4. Чтобы создать новый пул приложений, использующий .NET Framework 4 (для сохранения совместимости для других приложений), щелкните правой кнопкой мыши узел пулов приложений и выберите "Добавить пул приложений...". Назовите новый пул приложений и установите в раскрывающемся списке .Net Framework Version значение .Net Framework v4.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.

Настройка, сборка и запуск примера

  1. Убедитесь, что вы выполнили процедуру настройкиOne-Time для примеров Windows Communication Foundation.

  2. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  3. После создания решения запустите Setup.bat, чтобы настроить приложение ServiceModelSamples в IIS 7.0. Каталог ServiceModelSamples теперь должен отображаться как приложение IIS 7.0.

  4. Чтобы запустить пример в конфигурации с одним компьютером или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".

См. также