ASP.NET 兼容性

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

在此示例中,客户端是控制台应用程序(可执行文件),服务托管在 Internet Information Services (IIS) 中。

注释

本示例的设置过程和生成说明位于本主题末尾。

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

  1. 打开“控制面板”。 在“系统和安全”标题下打开管理工具小程序。 打开 Internet Information Services (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 示例执行了 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 示例中的说明进行作。

另请参阅