// http://lostinet.d2g.com/Lostinet-Publish/JScriptSoapClient/
/****************************************************************\
1<lostinet:source xmlns:lostinet="http://www.lostinet.com/lostinet-source/">
2<lostinet:source-info>
3<lostinet:name>JScriptSoapClient For .Net</lostinet:name>
4<lostinet:version>0.203</lostinet:version>
5<lostinet:description>SoapClient的JScript实现,Beta版</lostinet:description>
6</lostinet:source-info>
7<lostinet:author-info>
8<lostinet:name>Lostinet</lostinet:name>
9<lostinet:email>[email protected];[email protected];</lostinet:email>
10<lostinet:homepage>http://www.lostinet.com/</lostinet:homepage>
11</lostinet:author-info>
12<lostinet:copyright-info>
13<lostinet:copyright>版权声明:这个软件可以随意发布。也可以根据具体情况进行优化修改。但是请保留作者的相关信息。</lostinet:copyright>
14</lostinet:copyright-info>
15</lostinet:source>
***************************************************************/ / JScriptSoapClient For .Net 作者:迷失网络[Lostinet] 为你的WebService提供简单易用的调用方案 暂时只支持 string,int,float,double,boolean 的传输 使用方法: var wsdl=new JScriptSoapClient("http://host.com/webservice.asmx?WSDL"); var ws=wsdl.CreateWebService("webservicename"); var res=ws.MethodName(arg1,arg2); alert(res); alert(res.Length); alert(res.Item(0)+res.Item(1).Value+res.Item(2).Type); */ @cc_on @set @debug=true
/****************************************************************\
++++JScript+Operation+++JScript+Operation+++JScript+Operation+++++
\****************************************************************/
function GetUndefined(){}
function IsUndefined(unknown){
return typeof(unknown)=="undefined";
}
function typeOf(unknown){
return typeof(unknown);
}
function valueOf(unknown){
if(IsUndefined(unknown))return GetUndefined();
try{
return unknown.valueOf();
}catch(x){}
return unknown;
}
function toString(unknown){
if(IsUndefined(unknown))return "";
if(unknown===null)return "";
try{
return unknown.toString();
}catch(x){}
return unknown+"";
}
function IsEqual(unknown1,unknown2){
return unknown1==unknown2;
}
function IsIdentical(unknown1,unknown2){
return unknown1===unknown2;
}
function Is(unknown){
return unknown?true:false;
}
function Not(unknown){
return unknown?false:true;
}
function IsNull(unknown){
switch(typeOf(unknown))
{
case "undefined":return true;
case "string":return unknown=="";
case "number":return unknown==0;
case "object":return unknown==null;
case "function":return false;
case "boolean":return unknown?false:true;
default:return unknown?false:true;
}
}
function IsBoolean(unknown){
return typeOf(unknown)=="boolean";
}
function IsNumber(unknown){
return typeOf(unknown)=="number";
}
function IsString(unknown){
return typeOf(unknown)=="string";
}
function IsFunction(unknown){
return typeOf(unknown)=="function";
}
function IsObject(unknown){
return typeOf(unknown)=="object";
}
function IsJScriptObject(unknown)
{
if(false==IsObject(unknown)&&false==IsFunction(unknown))return false;
try{
return IsFunction(unknown.constructor);
}catch(x){
}
return false;
}
function VarValueOf(unknown){
var arr=new Array();
var unknown2=unknown;
while(unknown=valueOf(unknown))
{
if(unknown2===unknown)return unknown;
arr[arr.length]=unknown2;
for(var i=0;i
1<arr.length;i++) "";="" ",="" ";="" "不能加载wsdl:\n"="" &&nattr.basename="xmlns" &&nattr.nodevalue="ns)" (!isnull(wsdlurl))="" (!isnull(wsdlxml))="" (fs())(wsdlurl,username,password,wsdlxml);="" );="" ****************************************************************\="" +(x.message?x.message:x.description)="" +fs().caller);="" +function._name+"("+strarguments+")";="" +getnodename(collpf["wsdl"],"definitions")+"="" +i+"]";="" +msg;="" +new="" +ppt+"("+strarguments+")";="" +strarguments+")"="" +streval+"});f.delegate='Function;f()";' +wsdlurl+"\n\n详细的信息:\n"="" ,"jscriptsoapclient参数错误");="" ,"tagnametobasename():"+tagname);="" -="" ----jscript-operation---jscript-operation---jscript-operation-----="" 2001="" :="" :"http:="" :currentsoapclient.xmlns,="" ;="" @else="" @end="" @if(@debug)="" \****************************************************************="" _coll="new" _coll){="" _coll[index];="" _coll[obj.name]="obj;" _coll[ppt];="" _length="0;" _length++;="" _length;}="" activexobject("microsoft.xmldom");="" activexobject("microsoft.xmlhttp");="" alert(msg){="" alert(msg){}="" arr="new" arr[arr.length]="Function._Arguments[" array("constructor","hasownproperty","instanceof","isprototypeof","length","prototype","propertyisenumeramble","tostring","valueof");="" array();="" assert(="" assert(0,"createdefaultcollection::collection.item="" assert(index<_length||isnull(_coll[index])='false,"找不到Item:"+index);' assert(isfunction(var1),"delegate的参数非function");="" assert(isfunction(var1)||isobject(var1),"delegate的参数非object");="" assert(isfunction(var2),"delegate的参数非function");="" assert(isjscriptobject(obj)&&isstring(obj.name),"createdefaultcollection::collection._add="" assert(isjscriptobject(var1),"delegate的参数非jscriptobject");="" assert(isobject(var1[var2])||isfunction(var1[var2]),"delegate的参数不是方法");="" assert(isstring(basename)&&!isnull(basename),"getnodename()参数错误");="" assert(isstring(name),"isobjectppt()参数错误");="" assert(mustbetrue,msg){="" assert(mustbetrue,msg){}="" assert(nsservice.length="" assert(obj.name!='parseInt(obj.Name),"CreateDefaultCollection::Collection._add' assert(typeof(tagname)="string" basename;="" break;="" breakpoint(msg){="" breakpoint(msg){}="" collection(index)="" collection._add(obj){="" collection.item(index);="" collection.item(index){="" collection.length();="" collection.length(){return="" collection.length.tostring(){="" collection.length.valueof(){="" collection.tostring(){="" collection.valueof(){="" collection;="" collns="{" collns){="" collpf="new" collpf[i]="pf;" createdefaultcollection()="" createsoapclient()="" createsoapclient();="" currentsoapclient="new" currentsoapclient.collwebserviceinfo="CreateDefaultCollection();" currentsoapclient.password="password;" currentsoapclient.url="wsdlurl;" currentsoapclient.username="username;" currentsoapclient.xmlns='xdWSDL.documentElement.getAttribute("targetNamespace");' date().gettime()+"_"+math.floor(math.random()*1000000);="" delegate()是不合法的调用方式");="" delegate(var1,var2)="" delegate.querydelegate()="" delegate_function(func)="" delegate_function(var1);="" delegate_method(obj,name)="" delegate_method(var1,var2);="" delegate_virtualmethod(obj,func)="" delegate_virtualmethod(var1,var2);="" else{="" encoding="" error="x;" error(-1,msg));="" eval(streval);="" false;="" for(;i<function._arguments.length;i++)="" for(i="0;i<Function.arguments.length;i++)" for(var="" fs().caller.caller.delegate;="" fs(){return="" fs.caller}="" function="" function();}="" function(){="" function._arguments="new" function._arguments[i]="args[i];" function._function="func;" function._name="name;" function._object="obj;" function._object[ppt]="func;" function._object[ppt];="" function.detach(){="" function.preinvoke(){="" function.setarguments(args){="" function.setarguments(function.preinvoke.arguments);="" function.tostring(){return="" function.valueof(){return="" function;="" functionspace()="" functionspace();="" getnodename(prefix,basename){="" getundefined();="" http",="" i="0;i<nsAttr.length;i++){" if(!iscalledbynew(this))="" if(!isnull(function._object))delete="" if(!isnull(wsdlxml))="" if(!isnumber(index))return="" if(""!="prefix)return" if(_length="0)return" if(_this&&_this.constructor&&fs().caller="_This.constructor)" if(arr[i]="name)return" if(confirm(msg)="false)return;" if(error)throw(error);="" if(iscalledbynew(this))throwerror("new="" if(isjscriptobject(_coll[obj.name]))return="" if(isnull(function._function))return;="" if(isnull(function._object))return;="" if(isnull(xd.documentelement))="" if(isstring(var2)){="" if(isundefined(var1))throwerror("delegate()参数无效");="" if(isundefined(var2)){="" if(mustbetrue)return;="" if(nattr.prefix="" if(pf="null)continue;" if(pos="index)return" if(tagname.indexof(":")="-1)return" if(xd.parseerror.errorcode)="" if(xdwsdl.parseerror.errorcode)="" in="" iscalledbynew(_this){="" isequal(varvalueof(unknown1),varvalueof(unknown2));="" isidentical(varvalueof(unknown1),varvalueof(unknown2));="" isnull(varvalueof(unknown));="" isobjectppt(name)="" jscriptsoapclient(wsdlurl,username,password,wsdlxml)="" msg="BREAKPOINT,是否抛出异常?:\n" msg?null:(msg="fs().caller);" nattr="nsAttr.item(i);" nattr.basename;="" new="" nsattr="de.attributes;" nsservice='xdWSDL.selectNodes(xdrootpath+GetNodeName(collPf["wsdl"],"service"));' null;="" obj.name="" object();="" password?null:password="GetUndefined();" pf="(function(de,ns){" pos="0;" pos++;="" ppt="" prefix+":"+basename;="" res="eval(strEval);" res,error;="" res;="" return="" return;="" schemas.xmlsoap.org="" soap="" soapenc="" soaphttp="" strarguments='arr.join(",");' streval="var f=(function(){return " tagname.substr(0,tagname.indexof(":"));="" tagname.substring(tagname.indexof(":")+1,tagname.length);="" tagname;="" tagnametobasename(tagname){="" tagnametoprefix(tagname){="" target="" throw(new="" throwerror(="" throwerror("assert="" throwerror("breakpoint抛出异常");="" throwerror("不能取得"+wsdlurl+"\n可能是没有足够的权限");="" throwerror(msg){="" throwerror(xd.parseerror.reason);="" throwerror(xdwsdl.parseerror.reason);="" tostring(varvalueof(unknown));="" true;="" try{="" typeof(varvalueof(unknown));="" unknown2="unknown;" username?null:username="GetUndefined();" var="" var1,var2,明确参数="" varis(unknown){="" varisboolean(unknown){="" varisequal(unknown1,unknown2){="" varisfunction(unknown){="" varisidentical(unknown1,unknown2){="" varisnull(unknown){="" varisnumber(unknown){="" varisobject(unknown){="" varisstring(unknown){="" varnot(unknown){="" vartostring(collection.valueof());="" vartostring(unknown){="" vartypeof(unknown)="object" vartypeof(unknown){="" varvalueof(collection.item(0));="" varvalueof(unknown)?false:true;="" varvalueof(unknown)?true:false;="" while(1)="" window.alert(msg);="" wscript.echo(msg);="" wsdl="" www.w3.org="" xd="xh.responseXML;" xd;="" xdrootpath="//" xdwsdl="(function(){" xdwsdl.loadxml(wsdlxml);="" xh="new" xh.open("get",wsdlurl,false,username,password);="" xh.send();="" xmlschema"="" xmlschema-instance",="" xsd="" xsi="" {="" ||="" }="" })();="" })(xdwsdl.documentelement,collns[i]);="" };="" }catch(x){="" }catch(x){}="" 下面的判断根据varvalueof来进行。="" 不能为数字");="" 不能到达");="" 保留应用:对于以后的delegate的扩充="" 参数错误");="" 发生错误:\n"+msg);="" 对变量进行属性操作前不要使用这些判断="" 小心objdelegate.valueof()递归="">0,"WSDL中不包含WebService的描述");
2 var nService;
3 for(var i=0;i<nsService.length;i++)
4 {
5 nService=nsService.item(i);
6 CurrentSoapClient.CollWebServiceInfo._add(CreateWebServiceInfo());
7 }
8 delete nService;delete nsService;delete i;delete xdrootpath;
9 @if(@debug==false)
10 delete xdWSDL;
11 @end
12 CurrentSoapClient.CreateWebService=(function(name){
13 ASSERT(IsString(name),"CreateWebService()参数无效");
14 var wsi=CurrentSoapClient.CollWebServiceInfo.Item(name);
15 if(IsNull(wsi))ThrowError("找不到WebService:"+name);
16 return wsi.Create();
17 });
18 return CurrentSoapClient;
19 function CreateWebServiceInfo()
20 {
21 //stack var CurrentWebServiceInfo
22 var CurrentWebServiceInfo=new Object();
23 CurrentWebServiceInfo.CollWebMethodInfo=CreateDefaultCollection();
24 CurrentWebServiceInfo.Name=nService.getAttribute("name");
25 CurrentWebServiceInfo.IsUsable=false;
26 CurrentWebServiceInfo.UnusableReason+="WebService不支持soaphttp";
27 var nsPort=nService.selectNodes("port");
28 var nPort,port_name,port_binding,nBinding,nBindingSoap,port_binding_name,
29 nPortAddress,port_address_location,
30 nsOperation,nOperation,nOperationSoap;
31 for(var i=0;i<nsPort.length;i++)
32 {
33 nPort=nsPort.item(i);
34 port_name=nPort.getAttribute("name");
35 port_binding=nPort.getAttribute("binding");
36 nBinding=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"binding")+"[@name$eq$'"+port_name+"'&&@type$eq$'"+port_binding+"']");
37 nBindingSoap=nBinding.selectSingleNode(GetNodeName(collPf["soap"],"binding"));
38 if(IsNull(nBindingSoap))continue;
39 ASSERT(collNs["soaphttp"]==nBindingSoap.getAttribute("transport"),"nBindingSoap的transport不为"+collNs["soaphttp"]);
40 port_binding_name=TagNameToBaseName(port_binding);
41 nPortAddress=nPort.selectSingleNode(GetNodeName(collPf["soap"],"address"));
42 port_address_location=nPortAddress.getAttribute("location");
43 CurrentWebServiceInfo.IsUsable=true;
44 CurrentWebServiceInfo.UnusableReason="";
45 CurrentWebServiceInfo.URL=port_address_location;
46 nsOperation=nBinding.selectNodes("operation");
47 for(var j=0;j<nsOperation.length;j++)
48 {
49 nOperation=nsOperation.item(j);
50 nOperationSoap=nOperation.selectSingleNode(GetNodeName(collPf["soap"],"operation"));
51 ASSERT(
52 "literal"==
53 nOperation.selectSingleNode(GetNodeName(collPf["wsdl"],"input")+"/"+GetNodeName(collPf["soap"],"body"))
54 .getAttribute("use"),
55 "还没有对非literal的情况进行处理"
56 );
57 CurrentWebServiceInfo.CollWebMethodInfo._add(CreateWebMethodInfo());
58 }
59 }
60 delete nsPort;delete i;delete nPort;delete port_name;delete port_binding;
61 delete nBinding;delete nBindingSoap;delete port_binding_name;
62 delete nPortAddress;delete port_address_location;delete j;
63 delete nsOperation;delete nOperation;delete nOperationSoap;
64 CurrentWebServiceInfo.Create=(function(){
65 if(!CurrentWebServiceInfo.IsUsable)
66 ThrowError("WebService:"+CurrentWebServiceInfo.Name+"不能被创建\n"+CurrentWebServiceInfo.UnusableReason);
67 var WebService=new Object();
68 for(var i=0;i<CurrentWebServiceInfo.CollWebMethodInfo.Length;i++)
69 {
70 var wmi=CurrentWebServiceInfo.CollWebMethodInfo.Item(i);
71 if(IsObjectPPT(wmi.Name))
72 {
73 BREAKPOINT("WebMethod的名字"+wmi.Name+"和JScript的对象属性名冲突\n该WebMethod不被创建");
74 continue;
75 }
76 WebService[wmi.Name]=wmi.Create();
77 }
78 return WebService;
79 });
80 return CurrentWebServiceInfo;
81 function CreateWebMethodInfo()
82 {
83 var CurrentWebMethodInfo=new Object();
84 CurrentWebMethodInfo.CollParamInInfo=CreateDefaultCollection();
85 CurrentWebMethodInfo.CollParamOutInfo=CreateDefaultCollection();
86 CurrentWebMethodInfo.Name=nOperation.getAttribute("name");
87 CurrentWebMethodInfo.XMLNS=
88 CurrentWebMethodInfo.SoapAction=nOperationSoap.getAttribute("soapAction");
89 CurrentWebMethodInfo.IsUsable=true;
90 CurrentWebMethodInfo.UnusableReason="";
91 var nPortType=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"portType")+"[@name$eq$'"+port_binding_name+"']");
92 var nPortTypeOperation=nPortType.selectSingleNode(GetNodeName(collPf["wsdl"],"operation")+"[@name$eq$'"+CurrentWebMethodInfo.Name+"']");
93 var message_input=nPortTypeOperation.selectSingleNode(GetNodeName(collPf["wsdl"],"input")).getAttribute("message");
94 var message_output=nPortTypeOperation.selectSingleNode(GetNodeName(collPf["wsdl"],"output")).getAttribute("message");
95 var nMessageInput=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"message")+"[@name$eq$'"+TagNameToBaseName(message_input)+"']");
96 var nMessageOutput=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"message")+"[@name$eq$'"+TagNameToBaseName(message_output)+"']")</arr.length;i++)>