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 应用程序池才能运行。 若要创建新的应用程序池,或修改默认应用程序池,请执行以下步骤。
打开“控制面板”。 在“系统和安全”标题下打开管理工具小程序。 打开 Internet Information Services (IIS) 管理器 小程序。
展开 “连接 ”窗格中的树视图。 选择 “应用程序池” 节点。
若要将默认应用程序池设置为使用 .NET Framework 4(这可能导致现有站点不兼容),请右键单击 DefaultAppPool 列表项并选择“ 基本设置...”。 将 .Net Framework 版本 下拉到 .Net Framework v4.0.30128 (或更高版本)。
若要创建使用 .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.
设置、生成和运行示例
请确保您已经为 Windows Communication Foundation 示例执行了 One-Time 设置程序。
若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。
生成解决方案后,请运行 Setup.bat 以在 IIS 7.0 中设置 ServiceModelSamples 应用程序。 ServiceModelSamples 目录现在应显示为 IIS 7.0 应用程序。
若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行作。