[原創]微信小程序如何連接.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發送的網址要加入小程序的合法域名的問題,要在開發工具中點“測試號”,在微信平台上設置添加一下的。
最后就是發布小程序的問題,好像還挺麻煩的,以后再說吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM