博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法
阅读量:6967 次
发布时间:2019-06-27

本文共 3727 字,大约阅读时间需要 12 分钟。

废话不多说,直接讲解实现步骤

一、首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下:

//IAddService.csnamespace WcfService1{    [ServiceContract]    public interface IAddService    {        [OperationContract]        [WebInvoke(Method="POST",RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.WrappedRequest)]        int Add(int a,int b);    }}//AddService.csnamespace WcfService1{    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]    public class AddService : IAddService    {        public int Add(int a, int b)        {            return a + b;        }    }}

二、然后就是创建一个WCF服务缩主的svc文件,方法有两种:

1.在.NET FRAMEWORK 4.0以前,采用如下代码:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfService1.AddService" %>

2.在.NET FRAMEWORK 4.0及以后,采用如下代码:(无需创建SVC文件,直接在WEB.CONFIG文件中指定一个地址,重点关注:serviceHostingEnvironment 节点)

创建好后,直接运行该工程,出现如下画面则表示运行成功:

三、在同工程下新增一个WEB页面(格式不限,ASPX,HTML都可以),然后实现WEB客户端调用WCF服务的代码,我这里分为两种方式来完成,一是采用原生的XMLHttpRequest来调用,二是采用jQuery.ajax来调用,其内部原理相同,在此只是为了让大家更清楚一些。

采用原生的XMLHttpRequest来调用代码如下:

//简单封装一下:        var $ = function (id) {            return document.getElementById(id);        };        //获取原生的XMLHttpRequest对象        function getXMLHTTPRequest() {            var req = false;            try {                req = new XMLHttpRequest();            } catch (err) {                try {                    req = new ActiveXObject("Msxml2.XMLHTTP");                } catch (err) {                    try {                        req = new ActiveXObject("Microsoft.XMLHTTP");                    } catch (err) {                        req = false;                    }                }            }            return req;        }        $("btnGet").onclick = function () {            var xmlhttp = getXMLHTTPRequest();            xmlhttp.open("POST", "http://localhost:30348/AddService.svc/Add", true);            xmlhttp.setRequestHeader("Content-type", "application/json");            xmlhttp.onreadystatechange = function () {                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {                    var r = JSON.parse(xmlhttp.responseText);                    $("result").value = r.d;                }            };            xmlhttp.send('{"a":' + $("num1").value + ',"b":' + $("num2").value + '}');        }

采用jQuery.ajax来调用代码如下:

var jq = jQuery.noConflict();        jq("#btnGet").click(function () {            alert("click");            jq.ajax("http://localhost:30348/AddService.svc/Add", {                type: "POST",                //dataType: "json",                contentType: "application/json",                data: '{"a":' + jq("#num1").val() + ',"b":' + jq("#num2").val() + '}',                //data: 'a=' + jq("#num1").val() + '&b=' + jq("#num2").val(),                success: function (data) {                    jq("#result").val(data.d);                },                error: function (x, textStatus, errorThrown) {                    alert(textStatus);                }            });        });

最终实现效果如下:

特别说明,以上实现只支持在同一域名下进行调用,跨域调用则会报错,下次我将分享跨域调用WCF服务的方法,敬请期待,不足之处,欢迎指出,谢谢!

 

转载地址:http://onisl.baihongyu.com/

你可能感兴趣的文章
vue-cli 引入第三方插件终极法!!
查看>>
springboot项目 docker部署实践
查看>>
js 获取窗口、屏幕、页面元素宽高+位置(兼容ie)
查看>>
汤森路透 Thomson Reuters--使用多模型数据库ArangoDB 打造快速安全的简单视图分析...
查看>>
[Webpack并不难]使用教程(三)--- plugins
查看>>
TOP100summit:【分享实录】链家网大数据平台体系构建历程
查看>>
Node Cli 入门
查看>>
2017-10-13 前端日报
查看>>
PHP-X 系列教程:扩展内定义类和对象
查看>>
面试--css实现元素的水平和垂直居中
查看>>
深入理解ES6之《ES6中较小的改动》
查看>>
软键盘管理
查看>>
vuex的简单介绍
查看>>
web性能优化——使用RAIL模型评估性能
查看>>
微信JS-SDK分享
查看>>
python 最快 web 框架 Sanci 快速入门
查看>>
ES2015入门系列1-初识ES2015
查看>>
Python: 链式赋值的坑
查看>>
Node.js开发中的Cookie和Session
查看>>
【收藏】8段JQuery处理表单的代码片段,很实用
查看>>