仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1394|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之利用ASP.NET Atlas编写显现实在进度的P...

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:36:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一般的指的.net就是跟java相对的那种,主要是做企业级应用的。你如果想学这个,主要就是学C#和数据库。(ASP.NET好像很重要的,应该也要学的,ASP.NET上好像可以结合VB和C#等多种语言,但是微软主推C#)asp.net|显现英文版见:http://dflying.dflying.net/1/archive/100_building_a_real_time_progressbar_using_aspnet_atlas.html
当背景在举行某些长工夫的操纵时,假如能在页面上供应一个显现实在进度的进度条,而不是让用户不知情的守候或是夙昔的那些复杂的估量,将是一个十分可贵的出彩的地方。如今利用ASP.NETAtlas完整有大概做到这些。这篇文章将会商怎样完成这一功效并先容一些有关Atlas客户端控件开辟的基础观点。您同时能够在这里下载示例程序和源文件。完成网页上的进度条设法实在很复杂:编写一个客户真个Atlas控件,每隔一段工夫哀求一次服务器,并利用前往确当行进度数据更新进度条的显现。在这个示例中,将有四个部分的代码构成:
一个必要较长工夫才干完成的WebService
一个用来查询上述WebService进度的WebService
客户端Atlas进度条(ProgressBar)控件,卖力保护客户端逻辑并输入可视化UI。这也是本示例中最主要的一个组件,在未来可被重用于其他页面或程序的开辟
包括上述WebService和控件的ASP.NET测试页面
上面我们一步一步地来完成以上四个步骤:
必要较长工夫完成的WebService
在实践的程序中,一个必要较长工夫完成的WebService大概有以下声明:
1[WebMethod]
2publicvoidTimeConsumingTask()
3{
4ConnectToDataBase();
5GetSomeValueFromDataBase();
6CopySomeFilesFromDisk();
7GetARemoteFile();
8}
如许我们就能够拔出一些帮助办法来断定以后进度完成情形,setProgress(int)用来设定以后的进度完成百分比:
1[WebMethod]
2publicvoidTimeConsumingTask()
3{
4setProgress(0);
5ConnectToDataBase();
6setProgress(10);
7GetSomeValueFromDataBase();
8setProgress(40);
9CopySomeFilesFromDisk();
10setProgress(50);
11GetARemoteFile();
12setProgress(100);
13}
在本示例中,我们仅仅利用Cache来贮存进度完成信息并使用Thread.Sleep()办法摹拟操纵的提早:
1[WebMethod]
2publicintStartTimeConsumingTask()
3{
4stringprocessKey=this.Context.Request.UserHostAddress;
5stringthreadLockKey="thread"+this.Context.Request.UserHostAddress;
6objectthreadLock=this.Context.Cache[threadLockKey];
7if(threadLock==null)
8{
9threadLock=newobject();
10this.Context.Cache[threadLockKey]=threadLock;
11}
12
13//Onlyallow1runningtaskperuser.
14if(!Monitor.TryEnter(threadLock,0))
15return-1;
16
17DateTimestartTime=DateTime.Now;
18
19//Simulateatime-consumingtask.
20for(inti=1;i<=100;i++)
21{
22//Updatetheprogressforthistask.
23this.Context.Cache[processKey]=i;
24Thread.Sleep(70);
25}
26
27Monitor.Exit(threadLock);
28
29return(DateTime.Now-startTime).Seconds;
30}
31

查询进度的WebService
很简单完成,只需从Cache中获得进度信息:
1[WebMethod]
2publicintGetProgress()
3{
4stringprocessKey=this.Context.Request.UserHostAddress;
5objectprogress=this.Context.Cache[processKey];
6if(progress!=null)
7{
8return(int)progress;
9}
10
11return0;
12}
客户端进度条(ProgressBar)控件
第一步:从Sys.UI.Control承继
ProgressBar控件应当承继自Atlas的控件基类Sys.UI.Control,而且声明为密封类(sealedclass,不克不及再被承继)。Sys.UI.Control基类包括了一些一切的控件共有的操纵与办法。好比,将本人与某个HTML元素联系关系起来(也就是所谓的binding)等。同时也要注册以让Atlas懂得这个新的范例以便从此的声明及利用,比方,让Atlas能够获得这个范例的形貌等。
1Sys.UI.ProgressBar=function(associatedElement){
2Sys.UI.ProgressBar.initializeBase(this,[associatedElement]);
3
4}
5Type.registerSealedClass(Sys.UI.ProgressBar,Sys.UI.Control);
6Sys.TypeDescriptor.addType(script,progressBar,Sys.UI.ProgressBar);
7
第二步:增加公有成员并誊写响应的Setter/Getter
上面必要增加一些属性用来设定我们的控件。在这个例子中,我们必要三个属性:
Interval.每次从头查询进度并更新进度条的距离工夫。单元:毫秒
ServiceUrl.WebService文件的路径。
ServiceMethod.获得进度信息的办法名。
这些属性应当严厉恪守Atlas的定名标准:Getter应当以get_开首,Setter应当以set_开首并传进一个参数。还必要在控件的形貌办法(descriptor)中增加关于这些属性的申明。有关形貌办法(descriptor)将在第四步中申明。比方,针对ServiceMethod属性,我们有以下声明:
1var_serviceMethod;
2
3this.get_serviceMethod=function(){
4return_serviceMethod;
5}
6
7this.set_serviceMethod=function(value){
8_serviceMethod=value;
9}
第三步:利用Timer控件每隔一段工夫查询一次WebService
Sys.Timer用于每过一段工夫挪用一个办法(收回一个事务),我们能够界说一个托付来指向这个办法,并在并在每个工夫段外调询这个WebService。为了不扫瞄器内存保守,在控件析构(dispose)的时分应当记得做一些需要的清算。
另有,注重以后一个哀求并没有前往时,不该该发送第二个哀求。
1var_timer=newSys.Timer();
2var_responsePending;
3var_tickHandler;
4var_obj=this;
5
6this.initialize=function(){
7Sys.UI.ProgressBar.callBaseMethod(this,initialize);
8_tickHandler=Function.createDelegate(this,this._onTimerTick);
9_timer.tick.add(_tickHandler);
10this.set_progress(0);
11}
12
13this.dispose=function(){
14if(_timer){
15_timer.tick.remove(_tickHandler);
16_tickHandler=null;
17_timer.dispose();
18}
19_timer=null;
20associatedElement=null;
21_obj=null;
22
23Sys.UI.ProgressBar.callBaseMethod(this,dispose);
24}
25
26this._onTimerTick=function(sender,eventArgs){
27if(!_responsePending){
28_responsePending=true;
29
30//Asynchronouslycalltheservicemethod.
31Sys.Net.ServiceMethod.invoke(_serviceURL,_serviceMethod,null,null,_onMethodComplete);
32}
33}
34
35function_onMethodComplete(result){
36//Updatetheprogressbar.
37_obj.set_progress(result);
38_responsePending=false;
39}
第四步:增加把持办法
我们应当能够把持进度条的入手下手/中断。而且,关于一个Atlas控件,相干的形貌办法(descriptor)也是必需的。Atlas会使用它来形貌这个范例的信息。
1this.getDescriptor=function(){
2vartd=Sys.UI.ProgressBar.callBaseMethod(this,getDescriptor);
3td.addProperty(interval,Number);
4td.addProperty(progress,Number);
5td.addProperty(serviceURL,String);
6td.addProperty(serviceMethod,String);
7td.addMethod(start);
8td.addMethod(stop);
9returntd;
10}
11
12this.start=function(){
13_timer.set_enabled(true);
14}
15
16this.stop=function(){
17_timer.set_enabled(false);
18}
OK,今朝为止客户真个控件就完成了。我们把它存为ProgressBar.js。
ASP.NETTestingPageASP.NET测试页面
关于任何的Atlas页面,我们第一件必要做的事变就是增加一个ScriptManager服务器控件。在这个示例中我们将援用ProgressBar控件,较长工夫才干完成的WebService和进度查询WebService。(这两个WebService位于统一个文件中:TaskService.asmx)
1<atlas:ScriptManagerID="ScriptManager1"runat="server">
2<Scripts>
3<atlas:ScriptReferencePath="ScriptLibrary/ProgressBar.js"ScriptName="Custom"/>
4</Scripts>
5<Services>
6<atlas:ServiceReferencePath="TaskService.asmx"/>
7</Services>
8</atlas:ScriptManager>
接上去是页面的结构与款式:
1<styletype="text/CSS">
2*{}{
3font-family:tahoma;
4}
5.progressBarContainer{}{
6border:1pxsolid#000;
7width:500px;
8height:15px;
9}
10.progressBar{}{
11background-color:green;
12height:15px;
13width:0px;
14font-weight:bold;
15}
16</style>
17
18<div>TaskProgress</div>
19<divclass="progressBarContainer">
20<divid="pb"class="progressBar"></div>
21</div>
22<inputtype="button"id="start"value="StarttheTimeConsumingTask!"/>
23<divid="output"></div>
最初是一段JavaScript启动谁人较长工夫才干完成的WebService并让ProgressBar控件入手下手事情:

截图和下载
如今一切的事变都弄定了,能够运转了!
页面初始化:

运转中:

运转完成:

示例程序和源文件能够在这里下载
c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。
乐观 该用户已被删除
沙发
发表于 2015-1-18 05:03:01 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
若天明 该用户已被删除
板凳
发表于 2015-1-21 10:51:02 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
简单生活 该用户已被删除
地板
发表于 2015-1-30 15:59:18 | 只看该作者
Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
变相怪杰 该用户已被删除
5#
发表于 2015-2-6 13:56:41 | 只看该作者
HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了.
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-16 09:30:21 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
兰色精灵 该用户已被删除
7#
发表于 2015-3-5 03:29:38 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
只想知道 该用户已被删除
8#
发表于 2015-3-11 23:06:27 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
再现理想 该用户已被删除
9#
发表于 2015-3-19 15:58:50 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
10#
发表于 2015-3-28 21:52:56 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表