[原创]微信小程序如何连接.net webservice接口的后台

        最近把一个二十年前用VFP开发的进销存管理软件的数据库升迁到了SqlServer中,唉!这是多年前就想做的事了,一直拖到现在才做。
        然后就想着怎么用手机连接到后台的SqlServer数据库,这样随时随地都能查看报表了。想来想去好像还是做个微信小程序最简单点,但是直连数据库端口好像太不安全,也太落后了,当然小程序如何直连SqlServer也不懂,也不知道行不行,简单不简单,现在也不去研究了。
        所以就先做了个.net的webservice接口,是用WCF做的,套在数据库前端,为此还用了EF6.2跟数据库连接,EF也是早就想研究的东西了,用起来确实是比较简单方便的。
        接下来就是研究小程序怎么接到这个webservice上的问题了,在网上查了些资料,说的都比较简单,也互不相同,试了下都不行,只能自己研究了。因为连接webservice是用的http协议,就想到了以前用过的http sniffer工具,先用c#做个测试客户端连到webservice上,调通后就下了个http sniffer安装,没想到win7下装不进,wincap太老了,操作系统不支持了。又换到XP环境安装,装好后试了下,却截获不了c#客户端的信息,普通上网都能截的,不知道是什么原因。
       又上网查别的截取工具,查到个Microsoft Network Monitor,是微软自己做的,win7下也能安装,就马上下了装上了,一下就截到了信息,根据截到的信息,放到微信小程序中再去测试,试了几次还是不行,又到网上查资料,查到一篇关于小程序发送SOAP信息连接java webservice的文章,结合在一起再进行修改测试,最后成功连接并获取了正确的返回结果。
       小程序中主要代码如下:

requestWebService: function () {
var that = this//注意这里必须缓存,不然无法在回调中获取数据后进行操作

//组装请求体
var httpBody = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">';
httpBody += '<s:Body>';
httpBody += '<GetTestData xmlns="http://tempuri.org/"/>';
httpBody += '</s:Body>';
httpBody += '</s:Envelope>';

wx.request({
data: httpBody, //请求体
method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
//'content-type': 'application/json' // 默认值
//'content-type': 'application/x-www-form-urlencoded'
'content-type': 'text/xml; charset=utf-8',
}, // 设置请求的 header
success: function (res) {
// success
var Parser = require('../../lib/xmldom/dom-parser.js');
var XMLParser = new Parser.DOMParser();
var doc = XMLParser.parseFromString(res.data);
var result = doc.getElementsByTagName('GetTestDataResult')[0];
console.log(result.firstChild.nodeValue);
that.setData({ motto: result.firstChild.nodeValue })//这里是that不是this
console.log('submit success');
},
fail: function () {
// fail
console.log('submit fail');
},
complete: function () {
// complete
console.log('submit complete');
}
})
}

这里关键是发送了一个http协议的request的头信息和一个SOAP协议的data数据请求体信息。
因为返回的是XML格式的信息,为了获得其中需要的信息,又查资料用到了一个xmldom的第三方库来解析XML格式信息。
这个问题终于解决了,因为是测试,所以返回结果是一段字符串,比较简单,如果返回一个包含具体数据的对象,还要对XML数据进一步进行加工提取。
还有关于request发送的网址要加入小程序的合法域名的问题,要在开发工具中点“测试号”,在微信平台上设置添加一下的。
最后就是发布小程序的问题,好像还挺麻烦的,以后再说吧。
posted @ 2019-06-04 16:13  pzw  阅读(3683)  评论(0编辑  收藏  举报