|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实不相瞒,Java是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,Java的耗时是.NET的5倍。asp.net|web|毛病在本系列的上一篇(在ASP.NETAtlas中挪用WebService――先容及复杂使用)中,我们熟习了Atlas中挪用WebService的最基本办法,可是在实践开辟中,仅仅收回哀求并守候前往了局是不敷的,我们多数必要思索对毛病超时等的处置,也要同意用户作废操纵。侥幸的是,Atlas对WebService中的WebMethod的封装也充实思索到了这些需求。让我们举一个WebMethod的例子来讲明,比方,关于以下的WebMethod:
publicclassComplexWebService:System.Web.Services.WebService{
[WebMethod]
publicstringBadMethod(intdelayTime,boolthrowException)
{
//somethingsomething
}
}
Atlas发生的JavaScriptmashup将会有以下的署名:ComplexWebService.BadMethod(
delayTime,
throwException,
onMethodComplete,
onMethodTimeout,
onMethodError,
onMethodAborted,
userContext,
timeoutInterval,
priority,
useGetMethod,
);
注重到WebMethod中的两个参数依照按次作为了JavaScript办法的前两个参数,接上去另有一些分外的参数:
onMethodComplete:指定当该办法顺遂完成并前往时被触发的回调函数名,一样平常情形下您应当老是指定这个办法。
onMethodTimeout,:指定当该办法实行超不时被触发的函数名。
onMethodError:指定当该办法在实行中碰到非常时被触发的函数名。
onMethodAborted:制订当该办法实行时代被用户作废时被触发的函数名。
userContext:用户高低文工具,在上述四个函数中都能够会见到。
timeoutInterval:设定超时的工夫限定,单元毫秒,默许值仿佛为90000。一样平常情形下不必要变动。
priority:设定该办法的实行优先级。该优先级将被用于批量AJAX操纵(将鄙人一篇中提到)中。
useGetMethod:是不是接纳HTTPGET来发送哀求,默许为false。
上述这八个属性的按次必需依照指定的来。但偶然候我们只必要指定按次靠后的某个参数,就不能不同时誊写后面的参数。为此,Atlas特地为我们供应了另外一种挪用办法,将上述八个参数以dictionary的情势传给该办法。比方当我们只必要onMethodComplete和timeoutInterval参数时,能够如许写:
ComplexWebService.BadMethod(
delayTime,
throwException,
{
onMethodComplete:completeHandler,
timeoutInterval:10000
}
);
OK,让我们经由过程一个实例看看在一样平常情形下上述四种回调函数(onMethodComplete,onMethodTimeout,onMethodError和onMethodAborted)中的罕见处置。
起首让我们完成开首部分的WebService办法:
usingSystem;
usingSystem.Web;
usingSystem.Web.Services;
usingSystem.Web.Services.Protocols;
[WebService(Namespace="http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
publicclassComplexWebService:System.Web.Services.WebService{
[WebMethod]
publicstringBadMethod(intdelayTime,boolthrowException)
{
if(throwException)
{
thrownewException("Sorry,Idonotliketodothis!");
}
System.Threading.Thread.Sleep(delayTime);
return"Done!";
}
}
能够看到该办法有两个参数:delayTime指定该办法的延时,throwException指定该办法是不是掷出非常。经由过程把持这两个参数和挪用时的timeoutInterval参数,我们就能够摹拟完成,超时和非常的三种情形。
然后,在页面中到场ScriptManager并增加对这个WebService的援用:
<atlas:ScriptManagerID="ScriptManager1"runat="server">
<Services>
<atlas:ServiceReferencePath="ComplexWebService.asmx"/>
</Services>
</atlas:ScriptManager>
在ASPX页面上增加四个按钮,用来触发下述四种情形:<div>
ThisisaBADmethod,itcan:<br/>
<inputid="btnWorkFine"type="button"value="workfine"/>
<inputid="btnTimeOut"type="button"value="timeout"/>
<inputid="btnThrowException"type="button"value="throwanexception"/>
<inputid="btnCanceld"type="button"value="getcanceled"/>
</div>
一般完成,我们指定服务器端没有延时也没有非常,并给出了一个公道的(10秒)的超不时间:
functionbtnWorkFine_onclick(){
ComplexWebService.BadMethod(
0,
false,
onBadMethodComplete,
onBadMethodTimeout,
onBadMethodError,
onBadMethodAborted,
"btnWorkFine_onclick",
10000
);
}
functiononBadMethodComplete(result)
{
alert(result);
}
超时,指定服务器端延时3秒,但超不时间设置成为仅1秒:
functionbtnTimeOut_onclick(){
ComplexWebService.BadMethod(
3000,
false,
onBadMethodComplete,
onBadMethodTimeout,
onBadMethodError,
onBadMethodAborted,
"btnTimeOut_onclick",
1000
);
}
functiononBadMethodTimeout(request,userContext)
{
vartimeoutString="Thecallto"+userContext+"failedduetotimeout!";
alert(timeoutString);
}
非常,制订服务器端掷出非常。注重回调函数中可使用response参数失掉具体的毛病信息:
functionbtnThrowException_onclick(){
ComplexWebService.BadMethod(
0,
true,
onBadMethodComplete,
onBadMethodTimeout,
onBadMethodError,
onBadMethodAborted,
"btnThrowException_onclick",
10000
);
}
functiononBadMethodError(result,response,userContext)
{
varerrorString="Test"+userContext+"failed!";
if(result==null){
errorString+="Statuscode="+response.get_statusCode()+"";
}
else{
errorString+=
"Message="+result.get_message()+
"
stackTrace="+result.get_stackTrace();
}
alert(errorString);
}
用户作废,与一般完成相似,不外在收回哀求后立即利用request.abort()作废了操纵:
functionbtnCanceld_onclick(){
varrequest=ComplexWebService.BadMethod(
2000,
false,
onBadMethodComplete,
onBadMethodTimeout,
onBadMethodError,
onBadMethodAborted,
"btnCanceld_onclick",
10000
);
request.abort();
}
functiononBadMethodAborted(request,userContext){
varerrorString="Thecallto"+userContext+"failed,requestisaborted!";
alert(errorString);
}
不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听) |
|