Share via


ASP.NET 互換性

ASPNetCompatibility サンプルでは、Windows Communication Foundation (WCF) で ASP.NET 互換モードを有効にする方法を示します。 ASP.NET 互換性モードで実行されるサービスでは、ASP.NET アプリケーション パイプラインに完全に参加するため、ファイル/URL 認可、セッション状態、HttpContext クラスなどの ASP.NET 機能を使用できます。 HttpContext クラスを使用すると、クッキー、セッション、その他の ASP.NET 機能にアクセスできます。 このモードでは、バインディングは HTTP トランスポートを使用し、サービス自体は IIS でホストされる必要があります。

このサンプルでは、クライアントはコンソール アプリケーション (.exe) で、サービスはインターネット インフォメーション サービス (IIS) によってホストされています。

Note

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

このサンプルを実行するには、.NET Framework 4 アプリケーション プールが必要です。 新しいアプリケーション プールの作成または既定のアプリケーション プールの変更を行うには、次の手順に従います。

  1. [コントロール パネル] を開きます。 [システムとセキュリティ] 見出しの下にある [管理ツール] アプレットを開きます。 [インターネット インフォメーション サービス (IIS) マネージャー] アプレットを開きます。

  2. [接続] ウィンドウのツリー ビューを展開します。 [アプリケーション プール] ノードを選択します。

  3. 既定のアプリケーション プールで .NET Framework 4 を使用するように設定する (既存のサイトとの非互換性の問題が発生する可能性があります) には、 [DefaultAppPool] リスト項目を右クリックして [基本設定…] を選択します。 [.Net Framework バージョン] プルダウンを [.Net Framework v4.0.30128] (またはそれ以降) に設定します。

  4. .NET Framework 4 を使用する新しいアプリケーション プールを作成する (他のアプリケーションの互換性を保持する) には、 [アプリケーション プール] ノードを右クリックして [アプリケーション プールの追加] を選択します。 新しいアプリケーション プールに名前を付けて、 [.Net Framework バージョン] プルダウンを [.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 を呼び出してその結果をクリアし、0 にすることができます。

このサービスでは、ASP.NET セッションを使用して各クライアント セッションの結果を保持します。 これにより、サービスは、サービスへの複数の呼び出しによる各クライアントの実行結果を保持できます。

Note

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;
    }
}

このサンプルを実行すると、操作要求および応答がクライアントのコンソール ウィンドウに表示されます。 クライアントをシャットダウンするには、クライアント ウィンドウで Enter キーを押します。

0, + 100, - 50, * 17.65, / 2 = 441.25
Press <ENTER> to terminate client.

サンプルをセットアップ、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順を実行したことを確認します。

  2. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「 Building the Windows Communication Foundation Samples」の手順に従います。

  3. ソリューションがビルドされたら、Setup.bat を実行し、IIS 7.0 で ServiceModelSamples アプリケーションを設定します。 これで、ServiceModelSamples ディレクトリが IIS 7.0 アプリケーションとして表示されます。

  4. 単一コンピューターまたは複数コンピューター構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。

関連項目