ASP.NET 兼容性

ASPNetCompatibility 示例演示如何在 Windows Communication Foundation (WCF) 中启用 ASP.NET 兼容模式。 在 ASP.NET 兼容性模式中运行的服务可完全参与 ASP.NET 应用程序管道并可利用 ASP.NET 功能,如文件/URL 授权、会话状态和 HttpContext 类。 使用 HttpContext 类可以访问 Cookie、会话和其他 ASP.NET 功能。 此模式要求绑定使用 HTTP 传输,且服务本身必须承载于 IIS 中。

在此示例中,客户端是一个控制台应用程序(一个可执行文件),服务由 Internet 信息服务 (IIS) 承载。

注意

本主题的最后介绍了此示例的设置过程和生成说明。

此示例需要 .NET Framework 4 应用程序池才能运行。 若要创建新的应用程序池或修改默认应用程序池,请按照以下步骤操作。

  1. 打开“控制面板” 打开“系统和安全”标题下的“管理工具”小程序。 打开“Internet 信息服务 (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 将结果清零。

服务使用 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 示例中的说明进行操作。

另请参阅