为 ASP.NET AJAX 创建 WCF 服务

使用 Microsoft ASP.NET AJAX,可以通过快速响应的熟悉用户界面元素快速创建包括丰富用户体验的网页。 ASP.NET AJAX 提供了并入跨浏览器 ECMAScript (JavaScript) 和动态 HTML (DHTML) 技术的客户端脚本库,并将其与基于 ASP.NET 2.0 服务器的开发平台集成在一起。 通过使用 ASP.NET AJAX,可以改进用户体验和 Web 应用程序的效率。

ASP.NET AJAX 由客户端脚本库和集成的服务器组件组成,以提供稳定的开发框架。 从 ASP.NET 页访问服务:将服务 URL 添加到页上的 ASP.NET 脚本管理器控件后,就可以使用看起来与常规 JavaScript 函数调用完全相同的 JavaScript 代码调用服务操作。

通过添加相应的 ASP.NET AJAX 终结点,可以将大多数 Windows Communication Foundation (WCF) 服务作为与 ASP.NET AJAX 兼容的服务公开。

如果使用的是 Visual Studio,则在处理 ASP.NET 网站或 Web 应用程序时可以使用启用了 AJAX 的 WCF 服务的预建模板(可以从“添加新项目”对话框访问)。

如果未使用 Visual Studio 模板,则创建 ASP.NET AJAX 终结点有以下两种方法:

WCF Web HTTP 编程模型概述中描述的 Web 编程模型可用于 ASP.NET AJAX 服务。 尤其是在下列情况下:

  • 可以使用 WebGetAttributeWebInvokeAttribute 属性在 HTTP GET 和 HTTP POST 动词之间进行选择。 如果正确使用它们,则这可能会大大提高应用程序的性能。 有关详细信息,请参阅如何:在 ASP.NET AJAX 终结点的 HTTP POST 和 HTTP GET 请求之间进行选择

  • 可以使用 ResponseFormatResponseFormat 属性使服务返回 XML 数据而不是默认的 JavaScript 对象表示法 (JSON)。 使用 ASP.NET AJAX 框架执行此操作可导致 JavaScript 客户端接收 XML DOM 对象。

    警告

    您的操作必须将内容类型设置为文本/xml 才能生效。 否则,JavaScript 客户端会接收包含 XML 的字符串而不是 XML DOM 对象。

    下面是返回正确设置了内容类型的 XML 数据的操作示例:

    [OperationContract, WebGet(ResponseFormat=WebMessageFormat.Xml)]
    public XElement GetData()
    {
        XElement x;
        //Get some data here...
    
        WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
        return x;
    }
    
  • 如果要求与 ASP.NET AJAX 兼容,则不能更改 WebGetAttributeWebInvokeAttribute 特性上的任何其他属性。 只要不违反 ASP.NET AJAX 调用约定,就可以使用 Web 编程模型的其他方面。

更高级的方案要求了解 WCF 中 AJAX 支持的某些其他详细信息:

  • 若要了解如何使用 JavaScript 在 AJAX 页客户端和 WCF 服务之间传输数据,以及有关 .NET Framework 类型如何映射到 JavaScript 类型的详细信息,请参见支持 JSON 和其他数据传输格式

  • 若要利用 ASP.NET 功能(例如,基于 URL 的身份验证和访问 ASP.NET 会话信息),可能希望通过配置启用 ASP.NET 兼容性模式。

甚至在没有 ASP.NET AJAX 框架时,也可能使用 WCF 中的 AJAX 终结点。 执行此操作需要了解 WCF 中 AJAX 支持的支持体系结构。 有关此体系结构的讨论,请参阅 WCF Web HTTP 编程对象模型。 有关演示此方法的代码示例,请参阅使用 JSON 和 XML 的 AJAX 服务

另请参阅