[原创]微信小程序如何连接.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({

url: \'http://xxx.com.cn/xxxx.test.Service/xxxxtestservice.svc\',

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\',

\'SOAPAction\': \'http://tempuri.org/IxxxxtestService/GetTestData\'

}, // 设置请求的 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发送的网址要加入小程序的合法域名的问题,要在开发工具中点“测试号”,在微信平台上设置添加一下的。

最后就是发布小程序的问题,好像还挺麻烦的,以后再说吧。