仓酷云

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

[学习教程] ASP.NET网站制作之ASP.NET 2.0页面功能的思索

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

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

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

x
感觉很多控件都必须自己去写代码;用了WebMatrix感觉也不是很好,毕竟没有很强的WYSIWYG效果。现在就不知道如何是好了。asp.net|功能|页面  一样平常情形下我们一般在一个页面中,分离页面事务处置模子,按按次一步一步的声明各个处置历程。这就是所说的同步处置(Synchronous),我们能够很便利的界说页面处置的按次。同步处置固然很便利,但在耗时高哀求处置的时分就会表露严峻的成绩,在一个高并发的网站临盆服务器上,因为.net处置是基于所谓的ThreadPool的,而Threadpool中的处置线程又是无限的,假如以后ThreadPool中的线程已全体用尽,尔后继又有不休的年夜范围哀求的话,服务器的功能就会严峻的下落,更严峻的还会使服务器溃散。以是我们体贴最多的就是如何来更好的利用的.netThreadPool。让.net更好的发扬的功能。

  说到这就不能不谈.net的异步处置(Asynchronous),模子通常是BeginXXX,EndXXX,BeginXXX前往一个IAsycResult工具,个中包括对以后异步操纵的信息,而EndXXX用户承受前往值,输入参数。.net从ThreadPool平分配一个余暇线程给BeginXXX然后当即前往给ThreadPool,比及异步处置停止时,.net又从ThreadPool平分配一个余暇线程用于处置EndXXX办法。如许便可能有充足的线程用于处置别的的事变。见于篇幅成绩这里我们只谈asp.net2.0的异步处置模子,我们都晓得在1.x的时分要很好的创建页面的异步处置是对照贫苦的,大概微软很早就熟悉到了这一点,以是在2.0的版本中引进的新的页面处置模子,到场了便利的异步处置点(AsynchronousPoint)在PreRender事务和PreRenderComplete事务之间,在这个异步点,页面必要守候一切的异步处置都完成,以是能够在页面出现之前完成你必要的任何效果,极年夜简化了创建异步页面的办法。

  起首你要在创建页面的@page声明中到场Async="true",这是必需的。设置告知asp.net要选用IHttpAsyncHandler来处置以后的页面。接上去你必要做的通常为在Page_Load事务处置中利用异步处置历程,如今有两种路子:

  第一种就是利用Page.AddOnPreRenderCompleteAsync办法来处置必要异步处置的Begin和End办法集.以下:

AddOnPreRenderCompleteAsync(newBeginEventHandler(MyBeginMethod),newEndEventHandler(myEndMethod));
  经由过程增加下面的办法后,页面实行一般的性命周期事务直到页面的PreRender事务触发.然后Asp.net挪用先前在AddOnPreRenderCompleteAsync中的注册的Begin处置程序。一般在Begin处置程序中处置的是一些异步的web服务,IO和SQL的处置,如许就能够极年夜的减缓.net线程池的压力。比方:

<%@PageAsync="true"Language="C#"%>
<asp:ContentID="Content"ContentPlaceHolderID="Main"Runat="server">
<asp:LabelID="Output"Runat="server"></asp:Label>
</asp:Content>

publicpartialclassAsyncPage:System.Web.UI.Page
{
 privateWebRequestm_Request;

 voidPage_Load(objectsender,EventArgse)
 {
  AddOnPreRenderCompleteAsync(
   newBeginEventHandler(BeginAsyncOperation),
   newEndEventHandler(EndAsyncOperation)
  );
 }

 IAsyncResultBeginAsyncOperation(objectsender,EventArgse,AsyncCallbackcb,objectstate)
 {
  m_Request=WebRequest.Create("http://www.dofor.cn");
  returnm_Request.BeginGetResponse(cb,state);
 }

 voidEndAsyncOperation(IAsyncResultar)
 {
  stringtext;
  using(WebResponseresponse=m_Request.EndGetResponse(ar))
  {
   using(StreamReaderreader=newStreamReader(response.GetResponseStream()))
   {
    text=reader.ReadToEnd();
   }
  }

  Regexregex=newRegex("hrefs*=s*"([^"]*)"",RegexOptions.IgnoreCase);
  MatchCollectionmatches=regex.Matches(text);

  StringBuilderbuilder=newStringBuilder(1024);
  foreach(Matchmatchinmatches)
  {
   builder.Append(match.Groups[1]);
   builder.Append("<br/>");
  }

  Output.Text=builder.ToString();
 }
}
  第二中就是注册异步义务(RegisterAsynchronousTask).RegisterAsyncTask比AddOnPreRenderCompleteAsync具有更年夜的天真性和更多的上风。它能够同意你声明一个超时参数,一样能够声明在@Page中如:AsyncTimeout="5",以秒为单元,但要注重的是这里声明不是每一个异步处置历程的超时而是全部页面的处置工夫超时。一样.netframework2.0还为注册义务引进了新的MethodAsync,MethodAsync就是为了便利处置多个异步历程的。比方:

<%@PageAsync="true"Language="C#"%>
<asp:ContentID="Content"ContentPlaceHolderID="Main"Runat="server">
<asp:LabelID="Output"Runat="server"></asp:Label>
</asp:Content>

publicpartialclassAsyncPageTask:System.Web.UI.Page
{
 privateWebRequestm_Request;

 protectedvoidPage_Load(objectsender,EventArgse)
 {
  PageAsyncTasktask=newPageAsyncTask(
   newBeginEventHandler(BeginAsyncOperation),
   newEndEventHandler(EndAsyncOperation),
   newEndEventHandler(TimeoutAsyncOperation),
   null
  );

  RegisterAsyncTask(task);
 }

 IAsyncResultBeginAsyncOperation(objectsender,EventArgse,AsyncCallbackcb,objectstate)
 {
  m_Request=WebRequest.Create("http://www.dofor.cn");
  returnm_Request.BeginGetResponse(cb,state);
 }

 voidEndAsyncOperation(IAsyncResultar)
 {
  stringtext;
  using(WebResponseresponse=m_Request.EndGetResponse(ar))
  {
   using(StreamReaderreader=newStreamReader(response.GetResponseStream()))
   {
    text=reader.ReadToEnd();
   }
  }

  Regexregex=newRegex("hrefs*=s*"([^"]*)"",RegexOptions.IgnoreCase);
  MatchCollectionmatches=regex.Matches(text);

  StringBuilderbuilder=newStringBuilder(1024);
  foreach(Matchmatchinmatches)
  {
   builder.Append(match.Groups[1]);
   builder.Append("<br/>");
  }
  Output.Text=builder.ToString();
 }

 voidTimeoutAsyncOperation(IAsyncResultar)
 {
  Output.Text="以后数据不成用";
 }
}
  总之公道的使用asp.net2.0的异步处置,就能够极年夜的改良您年夜吞吐量高并发网站页面的功能。另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。
活着的死人 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 11:00:50 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
谁可相欹 该用户已被删除
板凳
发表于 2015-1-24 12:13:09 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
若相依 该用户已被删除
地板
发表于 2015-2-7 03:45:31 | 只看该作者
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
海妖 该用户已被删除
5#
发表于 2015-2-20 07:10:38 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
变相怪杰 该用户已被删除
6#
发表于 2015-3-6 16:37:05 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-13 04:15:19 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
精灵巫婆 该用户已被删除
8#
发表于 2015-3-20 12:37:29 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 13:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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