zoukankan      html  css  js  c++  java
  • [原创]微信小程序如何连接.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发送的网址要加入小程序的合法域名的问题,要在开发工具中点“测试号”,在微信平台上设置添加一下的。
    最后就是发布小程序的问题,好像还挺麻烦的,以后再说吧。
  • 相关阅读:
    [LeetCode] 374. Guess Number Higher or Lower
    [LeetCode] 35. Search Insert Position
    [LeetCode] 205. Isomorphic Strings
    [LeetCode] 87. Scramble String
    [LeetCode] 274. H-Index
    [LeetCode] 507. Perfect Number
    [LeetCode] 88. Merge Sorted Array
    [LeetCode] 283. Move Zeroes
    [LeetCode] 287. Find the Duplicate Number
    [LeetCode] 204. Count Primes
  • 原文地址:https://www.cnblogs.com/pzwsoft/p/10974192.html
Copyright © 2011-2022 走看看