wcf text/html text/xml,具有 JSON 和 XML 的 AJAX 服务示例

具有 JSON 和 XML 的 AJAX 服务示例

03/30/2017

本文内容

此示例演示如何使用 Windows Communication Foundation (WCF) 来创建返回) JavaScript 对象表示法 JSON (或 XML 数据的异步 JavaScript 和 XML (AJAX) 服务。 可以从 Web 浏览器客户端使用 JavaScript 代码来访问 AJAX 服务。 此示例以 基本 AJAX 服务 示例为基础。

与其他 AJAX 示例不同的是,此示例不使用 ASP.NET AJAX 和 ScriptManager 控件。 利用一些附加配置,可以通过 JavaScript 从任何 HTML 页面访问 WCF AJAX 服务,此处显示了这种情况。 有关将 WCF 与 ASP.NET AJAX 一起使用的示例,请参阅 Ajax 示例。

此示例演示如何在 JSON 和 XML 之间切换操作的响应类型。 无论服务是配置为由 ASP.NET AJAX 访问还是由 HTML/JavaScript 客户端页面访问,此功能均可用。

备注

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

为了启用非 ASP.NET AJAX 客户端,请在 .svc 文件中使用 WebServiceHostFactory(而不是 WebScriptServiceHostFactory)。 WebServiceHostFactory 将 WebHttpEndpoint 标准终结点添加到服务中。 在相对于 .svc 文件的空地址处配置终结点;这意味着服务的地址是 http://localhost/ServiceModelSamples/service.svc ,除操作名称外没有其他后缀。

可以使用 Web.config 中的以下节对终结点进行其他配置更改。 如果不需要额外更改,则可以移除该节。

以下示例中的服务是一个包含两个操作的标准 WCF 服务。 这两个操作都需要针对 Wrapped 或 WebGetAttribute 属性使用 WebInvokeAttribute 正文样式,该样式特定于 webHttp 行为,对于 JSON/XML 数据格式开关没有任何影响。

[OperationContract]

[WebInvoke(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped)]

MathResult DoMathXml(double n1, double n2);

操作的响应格式指定为 XML,这是行为的默认设置 。 但是,最好显式指定响应格式。

另一个操作使用 WebInvokeAttribute 属性并显式指定响应的 JSON(而不是 XML)。

[OperationContract]

[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]

MathResult DoMathJson(double n1, double n2);

请注意,在这两种情况下,操作都返回复杂类型,即 MathResult 标准 WCF 数据协定类型。

XmlAjaxClientPage.htm 的客户端网页包含 JavaScript 代码,该代码在用户单击 " 执行计算" (返回 JSON) 或 执行计算 (在页面上返回 XML) 按钮时调用上述两个操作之一。 用来调用服务的代码将构造 JSON 正文并使用 HTTP POST 发送它。 该请求是在 JavaScript 中手动创建的,不同于 基本 AJAX 服务 示例和其他使用 ASP.NET ajax 的示例。

// Create HTTP request

var xmlHttp;

// Request instantiation code omitted…

// Result handler code omitted…

// Build the operation URL

var url = "service.svc/ajaxEndpoint/";

url = url + operation;

// Build the body of the JSON message

var body = '{"n1":';

body = body + document.getElementById("num1").value + ',"n2":';

body = body + document.getElementById("num2").value + '}';

// Send the HTTP request

xmlHttp.open("POST", url, true);

xmlHttp.setRequestHeader("Content-type", "application/json");

xmlHttp.send(body);

当服务进行响应时,响应将显示出来,而不会在页面上的文本框中进一步执行任何处理。 这是为了进行演示而实现的,您可以直接遵循所使用的 XML 和 JSON 数据格式。

// Create result handler

xmlHttp.onreadystatechange=function(){

if(xmlHttp.readyState == 4){

document.getElementById("result").value = xmlHttp.responseText;

}

}

重要

您的计算机上可能已安装这些示例。 在继续操作之前,请先检查以下(默认)目录:

:\WF_WCF_Samples

如果此目录不存在,请参阅Windows Communication Foundation (wcf) ,并 Windows Workflow Foundation (的 WF) .NET Framework Windows Communication Foundation (WF 此示例位于以下目录:

:\WF_WCF_Samples\WCF\Basic\AJAX\XmlAjaxService

设置、生成和运行示例

定位到 http://localhost/ServiceModelSamples/XmlAjaxClientPage.htm (不要在浏览器中从项目目录) 打开 XmlAjaxClientPage.htm。

请参阅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值