如何:创建支持 AJAX 的 WCF 服务和访问该服务的 ASP.NET 客户端
09/12/2008
本文内容
本主题演示如何使用 Visual Studio 2008 创建一个支持 AJAX 的 Windows Communication Foundation (WCF) 服务和一个访问该服务的 ASP.NET 客户端。在“过程”一节中描述了创建服务和客户端的代码的步骤之后,在“示例”一节中提供了相应的代码。
创建 ASP.NET 客户端应用程序
打开 Visual Studio 2008。
在**“文件”菜单中,依次选择“新建”、“项目”、“Web”和“ASP.NET Web 应用程序”**。
将项目命名为 SandwichServices 并单击**“确定”**。
创建 WCF 支持 AJAX 的服务
在**“解决方案资源管理器”中右击 SandwichServices 项目,然后依次选择“添加”、“新建项”和“启用了 AJAX 的 WCF 服务”**。
在**“名称”框中将该服务命名为 CostService,然后单击“添加”**。
打开 CostService.svc.cs 文件。
将 ServiceContractAttribute 的 Namespace 指定为 SandwichService:
namespace SandwichServices
{
[ServiceContract(Namespace = "SandwichServices")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CostService
{
…
}
}
在服务中实现操作。将 OperationContractAttribute 添加到每个操作,以指定这些操作属于协定的一部分。下面的示例实现一个返回给定数量的三明治的费用的方法。
public class CostService
{
[OperationContract]
public double CostOfSandwiches(int quantity)
{
return 1.25 * quantity;
}
// Add more operations here and mark them with [OperationContract]
}
配置客户端以访问服务
打开 Default.aspx 页并选择**“设计”**视图。
从**“视图”菜单中选择“工具箱”**。
展开**“AJAX Extensions”节点,并将“ScriptManager”**拖放到 Default.aspx 页上。
右击**“ScriptManager”并选择“属性”**。
在**“属性”窗口中展开“服务”集合以打开“ServiceReference 集合编辑器”**窗口。
单击**“添加”,指定 CostService.svc 作为引用的“路径”,然后单击“确定”**。
在**“工具箱”中展开“HTML”节点,然后将“Input (Button)”**拖放到 Default.aspx 页上。
右击该按钮并选择**“属性”**。
将**“Value”**字段更改为 Price for 3 Sandwiches。
双击该按钮以访问 Javascript 代码。
在 元素中传入下面的 Javascript 代码。
function Button1_onclick() {
var service = new SandwichServices.CostService();
service.CostOfSandwiches(3, onSuccess, null, null);
}
function onSuccess(result){
alert(result);
}
从客户端访问服务
使用 Ctrl +F5 启动服务和 Web 客户端。单击**“3 份三明治的价格”**按钮以输出一个值,此值应为“3.75”。
示例
本示例包含 WCFService.svc.cs 文件中的服务代码和 Default.aspx 文件中的客户端代码。
//The service code contained in the CostService.svc.cs file.
using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
namespace SandwichServices
{
[ServiceContract(Namespace="SandwichServices")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CostService
{
// Add [WebGet] attribute to use HTTP GET
[OperationContract]
public double CostOfSandwiches(int quantity)
{
return 1.25 * quantity;
}
// Add more operations here and mark them with [OperationContract]
}
}
//The code for hosting the service is contained in the CostService.svc file.
//The client code contained in the Default.aspx file.
Untitled Page//
function Button1_onclick() {
var service = new SandwichServices.CostService();
service.CostOfSandwiches(3, onSuccess, null, null);
}
function onSuccess(result){
alert(result);
}
// ]]>