次の方法で共有


ASP.NET 互換性

ASPNetCompatibility サンプルでは、Windows Communication Foundation (WCF) で ASP.NET 互換モードを有効にする方法を示します。 ASP.NET 互換モードで実行されているサービスは、ASP.NET アプリケーション パイプラインに完全に参加し、ファイル/URL 承認、セッション状態、 HttpContext クラスなどの ASP.NET 機能を利用できます。 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 バージョン プルダウンを .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 セッションを使用して、各クライアント セッションの結果を格納します。 これにより、サービスは、サービスへの複数の呼び出しで各クライアントの実行結果を維持できます。

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 サンプルのOne-Time セットアップ手順を実行していることを確認します。

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

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

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

こちらも参照ください