分享
 
 
 

Lostinet作品:JScriptSoapClientv0.20Beta简单地异步调用你的WebService

王朝html/css/js·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

// http://lostinet.d2g.com/Lostinet-Publish/JScriptSoapClient/

body

{

color:black;background-color:white;

}

span.kw

{

color:blue;

}

span.string

{

background-color:#EEEEEE;

color:steelblue;

}

span.lr

{

color:maroon;

}

/****************************************************************\

<lostinet:source xmlns:lostinet="http://www.lostinet.com/lostinet-source/">

<lostinet:source-info>

<lostinet:name>JScriptSoapClient For .Net</lostinet:name>

<lostinet:version>0.203</lostinet:version>

<lostinet:description>SoapClient的JScript实现,Beta版</lostinet:description>

</lostinet:source-info>

<lostinet:author-info>

<lostinet:name>Lostinet</lostinet:name>

<lostinet:email>lostinet@21cn.com;lostinet@chongjian.com;</lostinet:email>

<lostinet:homepage>http://www.lostinet.com/</lostinet:homepage>

</lostinet:author-info>

<lostinet:copyright-info>

<lostinet:copyright>版权声明:这个软件可以随意发布。也可以根据具体情况进行优化修改。但是请保留作者的相关信息。</lostinet:copyright>

</lostinet:copyright-info>

</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<arr.length;i++)

{

if(arr[i]===unknown)ThrowError("VarValueOf()检测到的valueOf环");

}

unknown2=unknown;

}

}

function VarToString(unknown){

return toString(VarValueOf(unknown));

}

function VarTypeOf(unknown){

return typeOf(VarValueOf(unknown));

}

function VarIsEqual(unknown1,unknown2){

return IsEqual(VarValueOf(unknown1),VarValueOf(unknown2));

}

function VarIsIdentical(unknown1,unknown2){

return IsIdentical(VarValueOf(unknown1),VarValueOf(unknown2));

}

function VarIsNull(unknown){

return IsNull(VarValueOf(unknown));

}

function VarIs(unknown){

return VarValueOf(unknown)?true:false;

}

function VarNot(unknown){

return VarValueOf(unknown)?false:true;

}

//下面的判断根据VarValueOf来进行。

//对变量进行属性操作前不要使用这些判断

//保留应用:对于以后的Delegate的扩充

function VarIsBoolean(unknown){

return VarTypeOf(unknown)=="boolean";

}

function VarIsNumber(unknown){

return VarTypeOf(unknown)=="number";

}

function VarIsString(unknown){

return VarTypeOf(unknown)=="string";

}

function VarIsFunction(unknown){

return VarTypeOf(unknown)=="function";

}

function VarIsObject(unknown){

return VarTypeOf(unknown)=="object";

}

/****************************************************************\

----JScript-Operation---JScript-Operation---JScript-Operation-----

\****************************************************************/

function IsObjectPPT(name)

{

ASSERT(IsString(name),"IsObjectPPT()参数错误");

var arr=new Array("constructor","hasOwnProperty","instanceof","isPrototypeOf","length","prototype","propertyIsEnumeramble","toString","valueOf");

for(var i=0;i<arr.length;i++)

if(arr[i]==name)return true;

return false;

}

function ThrowError(msg){

throw(new Error(-1,msg));

}

@if(@debug)

function ASSERT(mustbetrue,msg){

if(mustbetrue)return;

msg?null:(msg="下面函数发生未指定错误:\m"+fs().caller);

ThrowError("ASSERT - 发生错误:\n"+msg);

}

function

BREAKPOINT(msg){

msg?null:(msg=fs().caller);

msg="BREAKPOINT,是否抛出异常?:\n"+msg;

try{

if(confirm(msg)==false)return;

}catch(x){

}

ThrowError("BREAKPOINT抛出异常");

}

function ALERT(msg){

try{

window.alert(msg);

return;

}catch(x){}

try{

WScript.Echo(msg);

return;

}catch(x){}

}

@else

function ASSERT(mustbetrue,msg){}

function

BREAKPOINT(msg){}

function ALERT(msg){}

@end

function fs(){return fs.caller}

function IsCalledByNew(_This){

try{

if(_This&&_This.constructor&&fs().caller==_This.constructor)

return true;

}catch(x){}

return false;

}

//var1,var2,明确参数

function Delegate(var1,var2)

{

if(IsCalledByNew(this))ThrowError("new Delegate()是不合法的调用方式");

if(IsUndefined(var1))ThrowError("Delegate()参数无效");

if(IsUndefined(var2)){

ASSERT(IsFunction(var1),"Delegate的参数非function");

return Delegate_Function(var1);

}

ASSERT(IsFunction(var1)||IsObject(var1),"Delegate的参数非object");

if(IsString(var2)){

ASSERT(IsObject(var1[var2])||IsFunction(var1[var2]),"Delegate的参数不是方法");

return Delegate_Method(var1,var2);

}

else{

ASSERT(IsJScriptObject(var1),"Delegate的参数非JScriptObject");

ASSERT(IsFunction(var2),"Delegate的参数非function");

return Delegate_VirtualMethod(var1,var2);

}

function Delegate_Function(func)

{

function Function(){

if(IsNull(Function._Function))return;

var arr=new Array();

for(i=0;i<Function.arguments.length;i++)

arr[arr.length]="Function.arguments["+i+"]";

for(;i<Function._Arguments.length;i++)

arr[arr.length]="Function._Arguments["+i+"]";

var strArguments=arr.join(",");

var strEval="Function._Function("+strArguments+")"

strEval="var f=(function(){return "+strEval+"});f.Delegate=Function;f()";

return eval(strEval);

}

function Function.valueOf(){return Function();}

function Function.toString(){return Function();}

function Function.PreInvoke(){

Function._Arguments=new Array();

Function.SetArguments(Function.PreInvoke.arguments);

return Function;

}

function Function.SetArguments(args){

for(var i=0;i<args.length;i++)

Function._Arguments[i]=args[i];

return Function;

}

function Function.Detach(){

Function._Function=null;

Function._Arguments=null;

}

Function._Function=func;

Function._Arguments=new Array();

return Function;

}

function Delegate_Method(obj,name)

{

function Function(){

if(IsNull(Function._Object))return;

var arr=new Array();

for(i=0;i<Function.arguments.length;i++)

arr[arr.length]="Function.arguments["+i+"]";

for(;i<Function._Arguments.length;i++)

arr[arr.length]="Function._Arguments["+i+"]";

var strArguments=arr.join(",");

var strEval="Function._Object."+Function._Name+"("+strArguments+")";

strEval="var f=(function(){return "+strEval+"});f.Delegate=Function;f()";

return eval(strEval);

}

function Function.valueOf(){return Function();}

function Function.toString(){return Function();}

function Function.PreInvoke(){

Function._Arguments=new Array();

Function.SetArguments(Function.PreInvoke.arguments);

return Function;

}

function Function.SetArguments(args){

for(var i=0;i<args.length;i++)

Function._Arguments[i]=args[i];

return Function;

}

function Function.Detach(){

Function._Object=null;

Function._Name="";

Function._Arguments=null;

}

Function._Object=obj;

Function._Name=name;

Function._Arguments=new Array();

return Function;

}

function Delegate_VirtualMethod(obj,func)

{

function Function(){

if(IsNull(Function._Object))return;

var arr=new Array();

for(i=0;i<Function.arguments.length;i++)

arr[arr.length]="Function.arguments["+i+"]";

for(;i<Function._Arguments.length;i++)

arr[arr.length]="Function._Arguments["+i+"]";

var strArguments=arr.join(",");

var ppt="DelegateVirtualMethod"+new Date().getTime()+"_"+Math.floor(Math.random()*1000000);

Function._Object[ppt]=func;

var res,error;

var strEval="Function._Object."+ppt+"("+strArguments+")";

strEval="var f=(function(){return "+strEval+"});f.Delegate=Function;f()";

try{

res=eval(strEval);

}catch(x){

error=x;

}

if(!IsNull(Function._Object))delete Function._Object[ppt];

if(error)throw(error);

return res;

}

function Function.valueOf(){return Function();}

function Function.toString(){return Function();}

function Function.PreInvoke(){

Function._Arguments=new Array();

Function.SetArguments(Function.PreInvoke.arguments);

return Function;

}

function Function.SetArguments(args){

for(var i=0;i<args.length;i++)

Function._Arguments[i]=args[i];

return Function;

}

function Function.Detach(){

Function._Object=null;

Function._Function=null;

Function._Arguments=null;

}

Function._Object=obj;

Function._Function=func;

Function._Arguments=new Array();

return Function;

}

}

function Delegate.QueryDelegate()

{//小心objDelegate.valueOf()递归

return fs().caller.caller.Delegate;

}

function JScriptSoapClient(wsdlurl,username,password,wsdlxml)

{

function GetNodeName(prefix,baseName){

ASSERT(IsString(baseName)&&!IsNull(baseName),"GetNodeName()参数错误");

if(""!=prefix)return prefix+":"+baseName;

return baseName;

}

function TagNameToPrefix(tagName){

ASSERT(typeof(tagName)=="string","TagNameToBaseName():"+tagName);

if(tagName.indexOf(":")==-1)return "";

return tagName.substr(0,tagName.indexOf(":"));

}

function TagNameToBaseName(tagName){

ASSERT(typeof(tagName)=="string","TagNameToBaseName():"+tagName);

if(tagName.indexOf(":")==-1)return tagName;

return tagName.substring(tagName.indexOf(":")+1,tagName.length);

}

function CreateDefaultCollection()

{

return FunctionSpace();

function FunctionSpace()

{

var _Length=0;

var _Coll=new Object();

function Collection(index)

{

return Collection.Item(index);

}

function Collection.valueOf(){

if(_Length==0)return GetUndefined();

return VarValueOf(Collection.Item(0));

}

function Collection.toString(){

return VarToString(Collection.valueOf());

}

function Collection.Length(){return _Length;}

function Collection.Length.valueOf(){

return Collection.Length();

}

function Collection.Length.toString(){

return Collection.Length();

}

function Collection.Item(index){

ASSERT(index<_Length||IsNull(_Coll[index])==false,"找不到Item:"+index);

if(!IsNumber(index))return _Coll[index];

var pos=0;

for(var ppt in _Coll){

if(pos==index)return _Coll[ppt];

pos++;

}

ASSERT(0,"CreateDefaultCollection::Collection.Item : 不能到达");

}

function Collection._add(obj){

ASSERT(IsJScriptObject(obj)&&IsString(obj.Name),"CreateDefaultCollection::Collection._add : 参数错误");

ASSERT(obj.Name!=parseInt(obj.Name),"CreateDefaultCollection::Collection._add : obj.Name 不能为数字");

if(IsJScriptObject(_Coll[obj.Name]))return true;

_Coll[obj.Name]=obj;

_Length++;

return true;

}

return Collection;

}

}

ASSERT( (!IsNull(wsdlxml)) || (!IsNull(wsdlurl)) ,"JScriptSoapClient参数错误");

username?null:username=GetUndefined();

password?null:password=GetUndefined();

if(!IsCalledByNew(this))

return new (fs())(wsdlurl,username,password,wsdlxml);

return CreateSoapClient();

function CreateSoapClient()

{

var CurrentSoapClient=new Object();

CurrentSoapClient.CollWebServiceInfo=CreateDefaultCollection();

CurrentSoapClient.URL=wsdlurl;

CurrentSoapClient.UserName=username;

CurrentSoapClient.Password=password;

var xdWSDL=null;

while(1)

{

try{

if(!IsNull(wsdlxml))

{

xdWSDL=new ActiveXObject("Microsoft.XMLDOM");

xdWSDL.loadXML(wsdlxml);

if(xdWSDL.parseError.errorCode)

ThrowError(xdWSDL.parseError.reason);

break;

}

xdWSDL=(function(){

var xh=new ActiveXObject("Microsoft.XMLHTTP");

xh.open("GET",wsdlurl,false,username,password);

xh.send();

var xd=xh.responseXML;

if(xd.parseError.errorCode)

ThrowError(xd.parseError.reason);

if(IsNull(xd.documentElement))

ThrowError("不能取得"+wsdlurl+"\n可能是没有足够的权限");

return xd;

})();

break;

}catch(x){

ThrowError(

"不能加载WSDL:\n"

+wsdlurl+"\n\n详细的信息:\n"

+(x.message?x.message:x.description)

);

}

}

CurrentSoapClient.XMLNS=xdWSDL.documentElement.getAttribute("targetNamespace");

var collNs={

target :CurrentSoapClient.XMLNS,

wsdl :"http://schemas.xmlsoap.org/wsdl/",

soap :"http://schemas.xmlsoap.org/wsdl/soap/",

soaphttp :"http://schemas.xmlsoap.org/soap/http",

soapenc :"http://schemas.xmlsoap.org/soap/encoding/",

xsi :"http://www.w3.org/2001/XMLSchema-instance",

xsd :"http://www.w3.org/2001/XMLSchema"

};

var collPf=new Object();

for(var i in collNs){

var pf=(function(de,ns){

var nsAttr=de.attributes;

for(var i=0;i<nsAttr.length;i++){

var nAttr=nsAttr.item(i);

if(nAttr.prefix=="xmlns"&&nAttr.nodeValue==ns)

return nAttr.baseName;

if(nAttr.prefix==""&&nAttr.baseName=="xmlns"&&nAttr.nodeValue==ns)

return "";

}

return null;

})(xdWSDL.documentElement,collNs[i]);

if(pf===null)continue;

collPf[i]=pf;

}

var xdrootpath="//"+GetNodeName(collPf["wsdl"],"definitions")+"/";

var nsService=xdWSDL.selectNodes(xdrootpath+GetNodeName(collPf["wsdl"],"service"));

ASSERT(nsService.length>0,"WSDL中不包含WebService的描述");

var nService;

for(var i=0;i<nsService.length;i++)

{

nService=nsService.item(i);

CurrentSoapClient.CollWebServiceInfo._add(CreateWebServiceInfo());

}

delete nService;delete nsService;delete i;delete xdrootpath;

@if(@debug==false)

delete xdWSDL;

@end

CurrentSoapClient.CreateWebService=(function(name){

ASSERT(IsString(name),"CreateWebService()参数无效");

var wsi=CurrentSoapClient.CollWebServiceInfo.Item(name);

if(IsNull(wsi))ThrowError("找不到WebService:"+name);

return wsi.Create();

});

return CurrentSoapClient;

function CreateWebServiceInfo()

{

//stack var CurrentWebServiceInfo

var CurrentWebServiceInfo=new Object();

CurrentWebServiceInfo.CollWebMethodInfo=CreateDefaultCollection();

CurrentWebServiceInfo.Name=nService.getAttribute("name");

CurrentWebServiceInfo.IsUsable=false;

CurrentWebServiceInfo.UnusableReason+="WebService不支持soaphttp";

var nsPort=nService.selectNodes("port");

var nPort,port_name,port_binding,nBinding,nBindingSoap,port_binding_name,

nPortAddress,port_address_location,

nsOperation,nOperation,nOperationSoap;

for(var i=0;i<nsPort.length;i++)

{

nPort=nsPort.item(i);

port_name=nPort.getAttribute("name");

port_binding=nPort.getAttribute("binding");

nBinding=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"binding")+"[@name$eq$'"+port_name+"'&&@type$eq$'"+port_binding+"']");

nBindingSoap=nBinding.selectSingleNode(GetNodeName(collPf["soap"],"binding"));

if(IsNull(nBindingSoap))continue;

ASSERT(collNs["soaphttp"]==nBindingSoap.getAttribute("transport"),"nBindingSoap的transport不为"+collNs["soaphttp"]);

port_binding_name=TagNameToBaseName(port_binding);

nPortAddress=nPort.selectSingleNode(GetNodeName(collPf["soap"],"address"));

port_address_location=nPortAddress.getAttribute("location");

CurrentWebServiceInfo.IsUsable=true;

CurrentWebServiceInfo.UnusableReason="";

CurrentWebServiceInfo.URL=port_address_location;

nsOperation=nBinding.selectNodes("operation");

for(var j=0;j<nsOperation.length;j++)

{

nOperation=nsOperation.item(j);

nOperationSoap=nOperation.selectSingleNode(GetNodeName(collPf["soap"],"operation"));

ASSERT(

"literal"==

nOperation.selectSingleNode(GetNodeName(collPf["wsdl"],"input")+"/"+GetNodeName(collPf["soap"],"body"))

.getAttribute("use"),

"还没有对非literal的情况进行处理"

);

CurrentWebServiceInfo.CollWebMethodInfo._add(CreateWebMethodInfo());

}

}

delete nsPort;delete i;delete nPort;delete port_name;delete port_binding;

delete nBinding;delete nBindingSoap;delete port_binding_name;

delete nPortAddress;delete port_address_location;delete j;

delete nsOperation;delete nOperation;delete nOperationSoap;

CurrentWebServiceInfo.Create=(function(){

if(!CurrentWebServiceInfo.IsUsable)

ThrowError("WebService:"+CurrentWebServiceInfo.Name+"不能被创建\n"+CurrentWebServiceInfo.UnusableReason);

var WebService=new Object();

for(var i=0;i<CurrentWebServiceInfo.CollWebMethodInfo.Length;i++)

{

var wmi=CurrentWebServiceInfo.CollWebMethodInfo.Item(i);

if(IsObjectPPT(wmi.Name))

{

BREAKPOINT("WebMethod的名字"+wmi.Name+"和JScript的对象属性名冲突\n该WebMethod不被创建");

continue;

}

WebService[wmi.Name]=wmi.Create();

}

return WebService;

});

return CurrentWebServiceInfo;

function CreateWebMethodInfo()

{

var CurrentWebMethodInfo=new Object();

CurrentWebMethodInfo.CollParamInInfo=CreateDefaultCollection();

CurrentWebMethodInfo.CollParamOutInfo=CreateDefaultCollection();

CurrentWebMethodInfo.Name=nOperation.getAttribute("name");

CurrentWebMethodInfo.XMLNS=

CurrentWebMethodInfo.SoapAction=nOperationSoap.getAttribute("soapAction");

CurrentWebMethodInfo.IsUsable=true;

CurrentWebMethodInfo.UnusableReason="";

var nPortType=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"portType")+"[@name$eq$'"+port_binding_name+"']");

var nPortTypeOperation=nPortType.selectSingleNode(GetNodeName(collPf["wsdl"],"operation")+"[@name$eq$'"+CurrentWebMethodInfo.Name+"']");

var message_input=nPortTypeOperation.selectSingleNode(GetNodeName(collPf["wsdl"],"input")).getAttribute("message");

var message_output=nPortTypeOperation.selectSingleNode(GetNodeName(collPf["wsdl"],"output")).getAttribute("message");

var nMessageInput=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"message")+"[@name$eq$'"+TagNameToBaseName(message_input)+"']");

var nMessageOutput=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"message")+"[@name$eq$'"+TagNameToBaseName(message_output)+"']");

var element_input=nMessageInput.selectSingleNode(GetNodeName(collPf["wsdl"],"part")).getAttribute("element");

var element_output=nMessageOutput.selectSingleNode(GetNodeName(collPf["wsdl"],"part")).getAttribute("element");

var nSchema=xdWSDL.selectSingleNode(xdrootpath+GetNodeName(collPf["wsdl"],"types")+"/"+GetNodeName(collPf["xsd"],"schema")+"[@targetNamespace$eq$'"+collNs["target"]+"']");

var nSchemaInput=nSchema.selectSingleNode(GetNodeName(collPf["xsd"],"element")+"[@name$eq$'"+TagNameToBaseName(element_input)+"']");

var nSchemaOutput=nSchema.selectSingleNode(GetNodeName(collPf["xsd"],"element")+"[@name$eq$'"+TagNameToBaseName(element_output)+"']");

CurrentWebMethodInfo.NameInput=nSchemaInput.getAttribute("name");

CurrentWebMethodInfo.NameOutput=nSchemaOutput.getAttribute("name");

var nsInputSequence=nSchemaInput.selectNodes(GetNodeName(collPf["xsd"],"complexType")+"/"+GetNodeName(collPf["xsd"],"sequence")+"/"+GetNodeName(collPf["xsd"],"element"));

var nSequence;

for(var i=0;i<nsInputSequence.length;i++)

{

nSequence=nsInputSequence.item(i);

CurrentWebMethodInfo.CollParamInInfo._add(CreateParamInfo());

}

var nsOutputSequence=nSchemaOutput.selectNodes(GetNodeName(collPf["xsd"],"complexType")+"/"+GetNodeName(collPf["xsd"],"sequence")+"/"+GetNodeName(collPf["xsd"],"element"));

for(var i=0;i<nsOutputSequence.length;i++)

{

nSequence=nsOutputSequence.item(i);

CurrentWebMethodInfo.CollParamOutInfo._add(CreateParamInfo());

}

if(CurrentWebMethodInfo.IsUsable==false)

{

CurrentWebServiceInfo.IsUsable=false;

CurrentWebServiceInfo.UnusableReason+="\n["+CurrentWebServiceInfo.Name+":"+CurrentWebMethodInfo.UnusableReason+"]";

}

delete nPortType;delete nPortTypeOperation;delete message_input;delete message_output;

delete nMessageInput;delete nMessageOutput;delete element_input;delete element_output;

delete nSchema;delete nSchemaInput;delete nSchemaOutput;

delete nsInputSequence;delete nsOutputSequence;delete nSequence;delete i;

CurrentWebMethodInfo.Create=(function(){

return FunctionSpace();

function FunctionSpace()

{

function InnerCreateCall(a){

return FunctionSpace();

function FunctionSpace()

{

var async=a;

var isReady=a?false:true;

var isCalled=false;

var xh=new ActiveXObject("Microsoft.XMLHTTP");

xh.onreadystatechange=onreadystatechange;

var xdr=new ActiveXObject("Microsoft.XMLDOM");

function onreadystatechange(){

if(xh.readyState!=4)return;

if(isReady==false)RecieveData();

}

function RecieveData()

{

isReady=true;

xdr.loadXML(xh.responseXML.xml);

xh=null;

AsyncCall.onready(AsyncCall);

}

function Send(args){

if(CurrentWebMethodInfo.CollParamInInfo.Length!=args.length)

ThrowError(CurrentWebMethodInfo.Name+":调用错误\n只能是"+CurrentWebMethodInfo.CollParamInInfo.Length+"个参数");

var xd=new ActiveXObject("Microsoft.XMLDOM");

xd.loadXML(

'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\

xmlns:xsd="http://www.w3.org/2001/XMLSchema"\

xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">\

<soap:Body></soap:Body></soap:Envelope>'

);

var nwm=xd.createElement(CurrentWebMethodInfo.NameInput);

nwm.setAttribute("xmlns",CurrentSoapClient.XMLNS);

xd.documentElement.firstChild.appendChild(nwm);

for(var i=0;i<CurrentWebMethodInfo.CollParamInInfo.Length;i++)

{

var ParamInfo=CurrentWebMethodInfo.CollParamInInfo.Item(i);

var np=xd.createElement(ParamInfo.Name);

np.text=ParamInfo.CreateFromValue(args[i]).String;

nwm.appendChild(np);

}

try{

xh.open("POST",CurrentWebServiceInfo.URL,async,CurrentSoapClient.UserName,CurrentSoapClient.Passwrod);

}catch(x){

ThrowError("调用WebMethod:"+CurrentWebMethodInfo.Name+"失败\n"+x.description);

}

xh.setRequestHeader("Content-Type","text/xml; charset=UTF-8");

xh.setRequestHeader("SOAPAction",'"'+CurrentWebMethodInfo.SoapAction+'"');

xh.send('<?xml version="1.0" encoding="UTF-8"?>'+xd.xml);

isCalled=true;

if(async==false)RecieveData();

return AsyncCall;

}

function Get(){

if(xdr.parseError.errorCode)

ThrowError("调用WebMethod:"+CurrentWebMethodInfo.Name+"返回错误");

var body=xdr.documentElement.firstChild;

if(body.firstChild.namespaceURI=="http://schemas.xmlsoap.org/soap/envelope/")

ThrowError(body.firstChild.selectSingleNode("faultstring").text);

var nsResult=body.selectSingleNode(CurrentWebMethodInfo.NameOutput).selectNodes("*");

var CollReturnValue=CreateDefaultCollection();

for(var i=0;i<nsResult.length;i++)

{

var nResult=nsResult.item(i);

var ParamInfo=CurrentWebMethodInfo.CollParamOutInfo.Item(i);

CollReturnValue._add(ParamInfo.CreateFromString(nResult.text));

}

return CollReturnValue;

}

function AsyncCall(){

return AsyncCall.Invoke(AsyncCall.arguments);

}

function AsyncCall.GetWebMethod(){

return Method;

}

function AsyncCall.Call(){

return AsyncCall.Invoke(AsyncCall.Call.arguments);

}

function AsyncCall.valueOf(){

return AsyncCall.toString();

}

function AsyncCall.toString(){

return "[WebMethod(Name=\""+CurrentWebMethodInfo.Name+"\")]";

}

function AsyncCall.IsReady(){

return isReady;

}

function AsyncCall.IsReady.valueOf(){return AsyncCall.IsReady();}

function AsyncCall.IsReady.toString(){return AsyncCall.IsReady();}

function AsyncCall.Invoke(args){

if(async)

{

if(isCalled)ThrowError("Async Call 对象只能使用一次");

return Send(args);

}

Send(args);

return Get();

}

function AsyncCall.GetResult(){

if(isReady==false)ThrowError(CurrentWebMethodInfo.Name+":结果还没有返回");

return Get();

}

function AsyncCall.onready(objCall){}

return AsyncCall;

}

}

function Method(){

return InnerCreateCall(false).Invoke(Method.arguments);

}

function Method.valueOf(){

return Method.toString();

}

function Method.toString(){

return "[WebMethod(Name=\""+CurrentWebMethodInfo.Name+"\")]";

}

function Method.CreateCall()

{

return InnerCreateCall(true);

}

return Method;

};

});

return CurrentWebMethodInfo;

function CreateParamInfo()

{

var CurrentParamInfo=new Object();

CurrentParamInfo.Name=nSequence.getAttribute("name");

CurrentParamInfo.Type=TagNameToBaseName(nSequence.getAttribute("type"));

CurrentParamInfo.TypeNS=(function(){

var prefix=TagNameToPrefix(nSequence.getAttribute("type"));

for(var i in collPf)

{

if(collPf[i]==prefix)return collNs[i];

}

//ThrowError("前缀"+prefix+"找不到名字空间");

return toString(xdWSDL.documentElement.getAttribute("xmlns:"+prefix));

})();

if(CurrentParamInfo.TypeNS!=collNs["xsd"])

{

CurrentWebMethodInfo.IsUsable=false;

CurrentWebMethodInfo.UnusableReason+="["+CurrentWebMethodInfo.Name+":"+CurrentParamInfo.Name+"不支持的数据类型namespace:"+CurrentParamInfo.TypeNS+"]";

}

(function(){

var arr=new Array("string","boolean","int","float","double");

for(var i=0;i<arr.length;i++)

{

if(arr[i]==CurrentWebMethodInfo.Type)

return;

}

CurrentWebMethodInfo.IsUsable=false;

CurrentWebMethodInfo.UnusableReason+="["+CurrentWebMethodInfo.Name+":"+CurrentParamInfo.Name+"不支持的数据类型:"+CurrentWebMethodInfo.Type+"]";

});

CurrentParamInfo.ValueFromString=(function(v){

ASSERT("string"==typeof(v),"SoapTypes.ValueFromString:str不是string");

/*

checking...CurrentParamInfo.TypeNS

...nothing to check now...

*/

switch(CurrentParamInfo.Type)

{

case "string":

return v;

case "int":

return parseInt(v);

case "float":

case "double":

return parseFloat(v);

case "boolean":

if(v.toLowerCase()=="false")return false;

if(v.toLowerCase()=="true")return true;

default:

ThrowError("SoapTypes.ValueFromString:boolean类型错误,值为"+v);

}

});

CurrentParamInfo.StringFromValue=(function(v){

if(IsNull(v))return "";

return VarToString(v);

});

CurrentParamInfo.CreateFromString=(function(v){

return CreateParam(true,v);

});

CurrentParamInfo.CreateFromValue=(function(v){

return CreateParam(false,v);

});

function CreateParam(bystring,v)

{

var param=new Object();

param.Name=CurrentParamInfo.Name;

param.Type=CurrentParamInfo.Type;

param.TypeNS=CurrentParamInfo.TypeNS;

if(bystring){

param.String=v;

param.Value=CurrentParamInfo.ValueFromString(v);

}

else{

param.Value=v;

param.String=CurrentParamInfo.StringFromValue(v);

}

param.valueOf=(function(){

return param.Value;

});

param.toString=(function(){

return param.String;

});

return param;

}

return CurrentParamInfo;

}

}

}

}

}

function JScriptSoapClient.valueOf(){

return JScriptSoapClient.toString();

}

function JScriptSoapClient.toString(){

return "JScriptSoapClient 0.20 Beta By http://www.lostinet.com";

}

function JScriptSoapClient.AsyncLoad(func,url,username,password)

{

ASSERT(IsFunction(func),"AsyncLoadJScriptSoapClient:参数无效");

ASSERT(IsString(url),"AsyncLoadJScriptSoapClient:参数无效");

var idLoad=new Date().getTime()*1000000+Math.floor(Math.random()*1000000)

var xh=new ActiveXObject("Microsoft.XMLHTTP");

xh.onreadystatechange=OnReadyStateChange;

xh.open("GET",url,true,username,password);

xh.send();

function OnReadyStateChange()

{

if(xh.readyState!=4)return;

var xd=xh.responseXML;

if(xd.parseError.errorCode)

{

func(null,url,idLoad);

}

func(new JScriptSoapClient(url,username,password,xd.xml),url,idLoad);

xh=null;

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有