共用方式為


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. 開啟 [控制台]。 開啟 [系統及安全性] 標題下的 [系統管理工具] Applet。 開啟 [Internet Information Services (IIS) 管理員] Applet。

  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 將結果清除為零。

服務會使用 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 範例的一次性安裝程序

  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 範例中的指示操作。

另請參閱