nodejs訪問WCF服務

卒跡發表於2017-03-30

單點登入

1.SSO站點地址
http://172.20.112.215
2.WebService地址
http://172.20.112.215/TokenService.svc?wsdl
3 需要單點登入的站點地址
http://192.168.2.66/
## 單點登入流程 ##
一.A系統沒有登入,沒有token引數
1.A系統內部處理跳到 SSO站點 http://172.20.112.215/GetToken.aspx?RequestUrl=http:((192.168.2.66 這個地址
2.SSO站點判斷當前使用者之前有沒有在SSO登入過:
1).有登入過: 跳回:http://192.168.2.66?token=bpwkVnpgzNVa(IEQ2ps2XAV(ZjpWT3eVp4MEJq2sUcIkXKnTJEG42uiEl8p6Wr1fwJ9YAvRH6fI)
2).沒有登入過:跳到:http://172.20.112.215/LoginPage.aspx?RequestUrl=http:((192.168.2.66 這個地址進行登入re

二.A系統沒有登入,有token引數
1.A系統內部處理,呼叫Webservice介面方法:ValidateLoginedByToken
1).如果返回的是NULL或者空,說明該token引數無效或者過期,A系統內部處理跳到http://172.20.112.215/LoginPage.aspx?RequestUrl=http:((192.168.2.66 進行登入
2).如果返回的是工號,說明該token有效,A系統對工號進行相應操作處理
這裡寫圖片描述

URL轉碼

url_helper.js

function UrlReplaceToBase64(urlString) {
    return urlString.replace(/\-/gi, "+").replace(/\(/gi, "/").replace(/\)/gi, "=").replace(/\]/gi, "&");
}
function Base64ReplaceToUrl(base64) {
    return base64.replace(/\+/gi, "-").replace(/\//gi, "(").replace(/=/gi, ")").replace(/&/gi, "]");
}
exports.UrlReplaceToBase64 =UrlReplaceToBase64 ;
exports.Base64ReplaceToUrl =Base64ReplaceToUrl ;

訪問WCF服務

參考:http://www.open-open.com/lib/view/open1336640628390.html

var WCF=require('wcf.js');
var url_helper=require("../models/url_helper.js");
var htmlparser = require("htmlparser2");

var wcf_handle_token=function (url_token,callback) {
    var token=url_helper.UrlReplaceToBase64(url_token);
    var BasicHttpBinding=WCF.BasicHttpBinding
        , Proxy = WCF.Proxy
        , binding = new BasicHttpBinding({})
        , proxy = new Proxy(binding, "http://172.20.112.215//TokenService.svc?wsdl")
        , message = "<Envelope xmlns='http://schemas.xmlsoap.org/soap/envelope/'>" +
        "<Header />" +
        "<Body>" +
        "<ValidateLoginedByToken xmlns='http://tempuri.org/'>" +
        "<token>" + token + "</token>" +
        "</ValidateLoginedByToken>" +
        "</Body>" +
        "</Envelope>";

    proxy.send(message, "http://tempuri.org/ITokenService/ValidateLoginedByToken", function (response, ctx) {

        var parser = new htmlparser.Parser({
            ontext: function(text){
            //擷取出的原始文字為11040876_1後面的_1表示WCF服務環境為中文環境
                var usercode=text.slice(0,-2);
                console.log("工號:"+usercode);
                callback(usercode);
            }
        }, {decodeEntities: true});
        parser.write(response);
        parser.end();
    });
};
exports.wcf_handle_token =wcf_handle_token ;

需要安裝WCF模組,npm install wcf
由於WCF服務交換資料的格式為xml(輸入和輸出)
htmlparser2是一個xml解析器 (比xml2json快:詳情參考 http://blog.csdn.net/weichuang_1/article/details/48861199 ),直接提取出xml中的文字,再擷取就得到工號

說明

http://172.20.112.215/TokenService.svc?wsdl 瀏覽器開啟是一個xml檔案,列舉這可以提供的服務
WCF服務是在webservice的基礎之上構建的資料交換方式,傳入引數和返回結果都是xml格式

相關文章