ASP.NET 兼容性

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

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

提示

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

此示例基于实现计算器服务的入门示例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 版本的解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。

  3. 若要用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.