📄 webserviced.htc
字号:
<!----------------------------------------------------------------------
// Copyright (c) 2000-2003 Microsoft Corporation. All Rights Reserved.
//---------------------------------------------------------------------->
<PUBLIC:COMPONENT ID=_webservice Name="WEBSERVICE" >
<PUBLIC:PROPERTY NAME="version"
VALUE="Microsoft WebService Behavior 1.01.1101" />
<PUBLIC:PROPERTY NAME="showProgress" VALUE=true />
<PUBLIC:PROPERTY NAME="helperUtils" />
<PUBLIC:METHOD NAME="useService"/>
<PUBLIC:METHOD NAME="createCallOptions"/>
<PUBLIC:METHOD NAME="createUseOptions"/>
<PUBLIC:METHOD NAME="invokeNext"/>
<PUBLIC:EVENT ID="eventResult" NAME="onresult"/>
<PUBLIC:EVENT ID="eventService" NAME="onserviceavailable"/>
<PUBLIC:PROPERTY NAME="dbgOn" VALUE=true />
<PUBLIC:METHOD NAME="dbgLoadTest"/>
</PUBLIC:COMPONENT>
<SCRIPT LANGUAGE="JSCRIPT">
// dbg : debug utilities
function dbgPrint(s)
{
if (typeof dbg == "undefined")
{
var odiv = element.document.createElement("div");
var obtn = element.document.createElement("button");
obtn.id = "dbgToggle";
obtn.innerText ="Show soap message edit";
obtn.onclick = function()
{ dbgTaSoap.style.display = dbgTaSoap.style.display == "" ? "none" : ""}
odiv.appendChild(obtn);
var obr = element.document.createElement("br");
odiv.appendChild(obr);
var o = element.document.createElement("textarea");
o.id = "dbgTaSoap";
o.style.width = "100%";
o.style.height = 200;
o.style.fontSize = "8pt";
o.style.display = "none";
odiv.appendChild(o);
odiv.appendChild(obr.cloneNode());
o = o.cloneNode();
o.id = "dbg";
o.style.display = "";
o.style.height = 500;
odiv.appendChild(o);
element.document.body.appendChild(odiv);
}
dbg.insertAdjacentText("beforeend", s);
}
function dbgPrintObject(o, oname)
{
dbgPrint(printObject(o, oname) + "\n");
}
function printObject(o, oname)
{
if (typeof o != 'object')
return oname + '{' + o + "}";
var s;
try
{
s = oname + '{\n' + printAttrib(o, ' ') + "}";
}
catch (e)
{
s = oname + " is not a simple jscript object";
}
return s;
}
function printAttrib(o, os)
{
if (o == null)
return os + 'null\n';
var s = '';
var k = null;
try
{
for (k in o)
{
var s2 = printAttrib(o[k], os + ' ');
var f = typeof(o[k]) == "object" && s2.length > 1;
s += os+'{'+k+'='+ typeof(o[k]);
if (typeof(o[k]) != "function")
s += f ? ' :\n'+s2+os:':'+o[k];
s += '}\n';
}
}
catch (e)
{
s = os + "{complex object}\n";
}
return k == null ? o : s;
}
function dbgDirectSoap(szPayload)
{
if (typeof dbgTaSoap == 'undefined')
return szPayload;
if (dbgTaSoap.value.length < 10)
dbgTaSoap.value = szPayload;
return dbgTaSoap.style.display == "" ? dbgTaSoap.value : szPayload;
}
function dbgLoadTest(serv, fn, cb, rfn, fRpc, fLiteral, fWrapped)
{
var oC = allocCall();
if ((typeof fn != 'string') || fn.length == 0)
return postError(oC, 0);
if (typeof cb != 'undefined')
oC.cb = cb;
oC.service = ensureWsdlUrl(serv);
oC.co = new Object();
oC.co.async = true;
oC.co.funcName = rfn;
oC.oM = new Object();
oC.oM.fRpc = fRpc != null && fRpc == true;
oC.oM.fLiteral = fLiteral != null && fLiteral == true;
oC.oM.fWrapped = fWrapped != null && fWrapped == true;
oC.oM.fOneWay = false;
var oS = _sdl[oC.service];
if (oS == null)
return postError(oC, 1);
oC.oXml = new ActiveXObject("Microsoft.XMLDOM");
oC.oXml.load(fn);
var ft = function(){processTest(oC);};
if (oC.oXml.readyState == 4)
setTimeout(ft, 0);
else
oC.oXml.onreadystatechange = ft;
dbgPrint("Call[" + oC.id + "] is used for direct testing : " + fn + "\n");
return oC.id;
}
function processTest(oC)
{
if (oC.oXml.readyState != 4)
return;
if (oC.oXml.parseError.errorCode != 0)
{
dbgPrint("Can't parse XML file\n");
return;
}
var oS = _sdl[oC.service];
if (oS == null || oS.fPending)
{
oC.next = oS.oDTNext;
oS.oDTNext = oC;
return;
}
dbgPrint("Service ready, running pending direct test " + oC.id + "\n");
runTest(oC);
}
function runTest(oC)
{
var oS = _sdl[oC.service];
if (oS == null)
{
return returnError(oC, 1);
}
oC.co.portName = oS.defPortName;
if (oC.co.funcName == null)
return returnError(oC, 0);
oC.oM.response= oS.soapPort[oS.defPortName].msgs[oC.co.funcName];
if (oC.oXml != null)
processResult(oC, oC.oXml.childNodes[1]);
dbgPrint("DirectTest " + oC.id + " done\n");
}
function dbgRunPendingTests(oS)
{
while (oS.oDTNext != null)
{
var nc = oS.oDTNext;
dbgPrint("Running pending direct test " + nc.id + "\n");
oS.oDTNext = oS.oDTNext.next;
runTest(nc);
}
}
dbgPrint("Webservice behavior attached to " + element.id + ", debug on\n");
// dbg : end of debug section
var _nextId = 0;
var _nextNsQ = 0;
var _sdl = new Array();
var _mProg = null;
var _fVBon = false;
var _aXmlHttp = new Array();
var xsi99 = "http://www.w3.org/1999/XMLSchema-instance";
var xsi01 = "http://www.w3.org/2001/XMLSchema-instance";
var xsd01 = "http://www.w3.org/2001/XMLSchema";
var xsd99 = "http://www.w3.org/1999/XMLSchema";
var _st = {
"negativeInteger" : 0,
"unsignedShort" : 0,
"unsignedByte" : 0,
"unsignedLong" : 0,
"unsignedInt" : 0,
"decimal" : 0,
"boolean" : 0,
"integer" : 0,
"double" : 0,
"float" : 0,
"short" : 0,
"byte" : 0,
"long" : 0,
"int" : 0,
"QName" : 1,
"string" : 1,
"normalizedString": 2,
"timeInstant" : 3,
"dateTime" : 3,
"date" : 4,
"time" : 5,
"base64Binary" : 6,
"base64" : 7};
function ErrDetail(errCode, errString, errRaw)
{
this.code = errCode;
this.string = errString;
this.raw = errRaw;
}
var L_InProgress_Text = "In Progress";
var L_InvalArg_Text = "Invalid argument";
var L_NotReady_Text = "Service unavailable";
var L_InvalRes_Text = "Invalid response";
var L_UnsupFun_Text = "Function not found";
var L_UnknownS_Text = "Unknown server error";
var L_AcDenied_Text = "Access denied";
var L_SoapUnav_Text = "Soap not available";
var L_HtcInter_Text = "HTC internal error";
var L_InvaPort_Text = "Invalid active port";
var L_InvaHead_Text = "Invalid headers";
var _errInvalArg = new ErrDetail("Client", L_InvalArg_Text, null); //0
var _errNotReady = new ErrDetail("Client", L_NotReady_Text, null); //1
var _errInvalRes = new ErrDetail("Server", L_InvalRes_Text, null); //2
var _errUnsupFun = new ErrDetail("Client", L_UnsupFun_Text, null); //3
var _errUnknownS = new ErrDetail("Server", L_UnknownS_Text, null); //4
var _errAcDenied = new ErrDetail("Server", L_AcDenied_Text, null); //5
var _errSoapUnav = new ErrDetail("Client", L_SoapUnav_Text, null); //6
var _errHtcInter = new ErrDetail("Client", L_HtcInter_Text, null); //7
var _errInvaPort = new ErrDetail("Client", L_InvaPort_Text, null); //8
var _errInvaHead = new ErrDetail("Client", L_InvaHead_Text, null); //9
var _aryError = new Array(
_errInvalArg,
_errNotReady,
_errInvalRes,
_errUnsupFun,
_errUnknownS,
_errAcDenied,
_errSoapUnav,
_errHtcInter,
_errInvaPort,
_errInvaHead
);
function postError(oCall, refError)
{
if (oCall.co != null && !oCall.co.async)
return returnError(oCall, refError);
var s = function(){returnError(oCall, refError);};
setTimeout(s, 0);
return oCall.id;
}
function returnError(oCall, refError)
{
hideProgress();
var r = new Object();
r.id = oCall.id;
r.error = true;
r.errorDetail = _aryError[refError];
if (oCall.co != null && oCall.co.async == false)
{
return r;
}
var cb = oCall.cb;
if (cb == null)
{
var evt = createEventObject();
evt.result = r;
try { eventResult.fire(evt); } catch(e) {};
}
else
{
try { cb(r); } catch(e) {};
}
dbgPrint("handled error " + refError + "\n");
return oCall.id;
}
function createCallOptions(fn, pn, cm, to, un, pw, hd, ep, pr)
{
var o = new Object();
o.funcName = fn;
o.portName = pn;
o.async = cm;
o.timeout = to;
o.userName = un;
o.password = pw;
o.SOAPHeader= hd;
o.endpoint = ep;
o.params = pr;
return o;
}
function createUseOptions(rc, sh)
{
var o = new Object();
o.reuseConnection = rc == true;
o.SOAPHeader = sh;
return o;
}
function cloneObject(co)
{
var o = new Object();
for (var x in co)
o[x] = co[x];
return o;
}
function ensureVBArray(d)
{
if (!_fVBon)
{
var s1 =
"\nFunction VBGetArySize(a, d)\n"
+ "Dim x\n"
+ "Dim s\n"
+ "s=UBound(a, 1)\n"
+ "For x = 2 To d \n"
+ 's = s & "," & UBound(a, x)\n'
+ "Next\n"
+ "VBGetArySize=s\n"
+ "End Function\n";
var o = element.document.createElement("script");
o.language = "VBS";
o.text = s1;
element.document.body.appendChild(o);
_fVBon = true;
}
var fn = "VBGetAryItem" + d;
if (eval("typeof " + fn) != 'undefined')
return;
var a = new Array();
for (var i = 0; i < d; i++)
a[i] = 'p' + i;
var sp = a.join(", ");
var s2 = "\nFunction " + fn + "(a, " + sp + ")\n"
+ "x = VarType(a(" + sp + "))\n"
+ "If x=9 Or x=12 Then\n"
+ "Set " + fn + "=a(" + sp + ")\n"
+ "Else\n"
+ fn + "=a(" + sp + ")\n"
+ "End If\n"
+ "End Function\n";
var o = element.document.createElement("script");
o.language = "VBS";
o.text = s2;
element.document.body.appendChild(o);
}
//
// array used by base64 codec
//
var _b64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
//
// base64 encoder helper
//
function encb64hlp(a, k, s, iFrom, iTo, fStr)
{
var d = 0;
for (var i = 0; i + iFrom <= iTo; i ++)
d |= (fStr ? s.charCodeAt(i + iFrom) : s[i + iFrom]) << (16 - 8*i);
for (var i = 0; i <= iTo - iFrom + 1; i ++)
a[k++] = _b64.charAt(d>>>(18 - i*6)&0x3f);
return k;
}
//
// base64 decoder helper
//
function decb64hlp(a, ai, ca, iFrom, iTo)
{
var d = 0;
var l = iTo - iFrom;
for (var i = 0; i + iFrom <= iTo; i ++)
d |= ca[i + iFrom] << (18 - 6*i);
for (var i = 0; i < l; i ++)
a[ai + i] = (d >>> (16 - i*8)) & 0xff;
return ai + i;
}
//
// encode a string to base64
// s[in] : string to be encoded
// return : base64 string
//
function encb64(s)
{
var fStr = typeof(s) == "string";
var i;
var l = s.length;
var a = new Array();
var k = 0;
for (i = 2; i < l; i = i + 3)
{
k = encb64hlp(a, k, s, i - 2, i, fStr);
if ((i+1) % 57 == 0)
a[k++] = "\r\n";
}
var padd = l - i + 2;
if (padd > 0)
{
k = encb64hlp(a, k, s, i - 2, l-1, fStr);
a[k] = (padd > 1) ? "=" : "==";
}
return a.join("");
}
//
// decode a b64 string
// s[in] : string to be decoded
// return : decoded string
//
var _b64rsc = "\n\r\t";
function decb64(s, fStr)
{
var i, j = 0;
var ip = s.indexOf('=');
var l = ip >= 0 ? ip : s.length;
var ca = new Array();
for (i = 0; i < l; i++)
{
var c = s.charAt(i);
if (_b64rsc.indexOf(c) >= 0)
continue;
ca[j++] = _b64.indexOf(c);
}
var l = j;
var a = new Array();
var ai = 0;
for (i = 3; i < l; i = i + 4)
ai = decb64hlp(a, ai, ca, i-3, i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -