其实我想过,不用COM也可以实现SOAP的。 假设服务器已经有WEBSERVICE, 那么只要我们在客户端用脚本(JScript)解析WDSL,然后分配对象,就可以模拟SOAPCLIENT了。 例如我期望的写发是: try{ var ws=new WebClass("http:///webservice.aspx?WDSL"); }catch(x){ ...failed... return; }
try{ ws.WebMothed1("str1","str2"); }catch(x){ ...failed... return; }
我的具体想法是: function WebClass(urlWDSL) { ..获取WDSL的信息 if(WDSL中不支持SOAP) //没有办法啦。。难道每调用一次都要提交一个FORM? throw(new Error(-1,"不支持SOAP")); ..处理WEBMETHOD的信息生成webmethods 例如现在有[WebMothod]string MD5(string strInput) 那么就: for(var i=0;i<webmethods.length;i++) { var curwm=this[webmethods[i].name]=function() { var fs=function(fs) { return fs.caller; } var fs=fs(fs); return fs.Invoke(this,fs,fs.webmethoddata,fs.arguments); } curwm.webmethoddata=webmethods[i] curwm.Invoke=function(ws,wm,wmdata,args) { 根据wmdata提供的信息,检查args和进行可行的转换 遇到不可以转换的,就开始发送: xmlhttp.Open("POST",wmdata.urlSoap,false)//同步 xmlhttp.setRequestHeader.... xmlhttp.Send... 然后把结果进行处理。 如果是有效的结果,返回结果(转换)。 如果不是有效的,抛出异常 } } }
|