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 应用程序池才能运行。 若要创建新的应用程序池或修改默认应用程序池,请按照以下步骤操作。
打开“控制面板” 打开“系统和安全”标题下的“管理工具”小程序。 打开“Internet 信息服务 (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.
设置、生成和运行示例
若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照 Building the Windows Communication Foundation Samples中的说明进行操作。
生成解决方案后,运行 Setup.bat 以在 IIS 7.0 中设置 ServiceModelSamples 应用程序。 现在,ServiceModelSamples 目录应显示为 IIS 7.0 应用程序。
要使用单机配置或跨计算机配置运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。