| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 688 人关注过本帖, 1 人收藏
标题:[王杰]ASP.NET高级应用
只看楼主 加入收藏
王杰
Rank: 2
等 级:新手上路
威 望:4
帖 子:307
专家分:0
注 册:2005-5-13
收藏(1)
 问题点数:0 回复次数:6 
[王杰]ASP.NET高级应用

ASP.NET高级应用(1)

XML及其应用

  XML 是标准扩展语言的简称,是未来Web编程的标准。在这一章中,我们将讲述XML在ASP.NET中的应用

  制作广告条

  在这个程序中,我们通过XML语言实现每次访问网页时,将显示不同的广告条。在本例中,我们只调用了两条广告
  源文件:advanceapp\intro.aspx

  Intro.aspx的代码如下:



<html>
<center><title>广告条演示</title></center>
<head>
<link rel="stylesheet"href="intro.css">
</head>
<body>
<center>
<form action="intro.aspx" method="post" runat="server">
<h2>广告条演示</h2>
<asp:adrotator AdvertisementFile="intro.xml" BorderColor="black" BorderWidth=1 runat="server"/>
</form>
</center>
</body>
</html>

intro.xml的 代码如下:
<Advertisements>
<Ad>
<ImageUrl>./hp1.gif</ImageUrl>
<NavigateUrl>http://www.yesky.com</NavigateUrl>
<AlternateText>欢迎访问!</AlternateText>
<Keyword>Computers</Keyword>
<Impressions>80</Impressions>
</Ad>

<Ad>
<ImageUrl>./hp2.gif</ImageUrl>
<NavigateUrl>http://www.yesky.com</NavigateUrl>
<AlternateText>欢迎访问</AlternateText>
<Keyword>Computers</Keyword>
<Impressions>80</Impressions>
</Ad>
</Advertisements>


  在intro.aspx中,我们使用了<asp:adrotator AdvertisementFile="intro.xml" BorderColor="black" BorderWidth=1 runat="server"/>这条语句来嵌入intro.xml文件。

[此贴子已经被作者于2005-11-28 18:09:21编辑过]

搜索更多相关主题的帖子: 王杰 NET ASP 广告 应用 
2005-11-28 17:57
王杰
Rank: 2
等 级:新手上路
威 望:4
帖 子:307
专家分:0
注 册:2005-5-13
收藏
得分:0 

ASP.NET高级应用(2)

三层结构及其应用

  概念及环境

  ASP.NET中的三层结果开发方法,其实其思想跟Java的一样。Java中的三层架构为前端的html、Jsp、Servlet,中间层为JavaBean、EJB,后面为数据库服务器。而在ASP.NET中,前段为html、asp、aspx等,中间层为有.vb、.cs等文件编译而成的.dll控件,后面为数据库服务器。

  在我们的三层架构中,我们的数据库层通过中间层来连接以及操作,前端给中间层传递参数,并接受中间层的参数。在我们的ASP.NET中,我们主要关注的是我们的中间层与前端的数据交互。

  我们一般统称中间层为组件,组件可以用.vb编译而成,也可以用.cs文件编译而成。中间层一般为.dll文件。微软的.NET技术在这个方面比他的以前的任何版本都要来的简单,这也是它的一打好处之一。以前我们要注册一个.dll文件,有是注册有是重启动,而在.net上,我们的.dll文件拿来就用,不用再考虑注册的问题。

  在没有Visual stutio.net之前,我们用写成的.bat文件来把.vb和.cs文件编译成.dll文件,在.bat文件里,我们写入编译的文件名称、相关联的名字空间、要编译成的文件名以及对应的命令名称,然后运行就行了。听起来很复杂,这也是很多初学者在编译第一个.dll文件时所害怕的事情。但是做起来很简单的。下面我们举一个例子来说明.bat文件的写法,假设我们有一个文件名为:saidy.vb的文件,我们要把它编译成saidy.dll的文件,其中用到System、System.Data、System.Data.SQL名字空间,我们可以创建一个dblink.bat文件,内容如下:

  vbc /out:..\bin\saidy.dll /t:library /r:system.dll /r:system.data.dll / r:system.data.sql.dll

  dblink.vb

  这是编译.vb程序的命令,如果是编译.cs文件,则命令会是不一样,我们假定有一个saidy.cs的文件,按照上面的要求,我们编译如下:

  cs /out:..\bin\saidy.dll /t:library /r:system.dll /r:system.data.dll / r:system.data.sql.dll
dblink.cs

  我们可以看出来,大部分是一样的。

  当然,如果我们有微软公司的vs.net编程环境,则我们不用这么麻烦,我们可以象编译vb或者vc程序一样方便的编译.dll文件。微软公司的vs.net是一个集大成者,把各种语言整合起来,在这个环境下都可以写出不同语言的程序。具体的应用我们会在专门的章节上介绍的。

  一个基于三层架构的例子

  我们通过具体的例子来说明三层架构的应用,我们建一个小项目来说明这个问题。有时为了安全性,我们通常把与数据库的连接用一个动态连接库文件封装起来,这样我们就要把写数据库连接的.vb或者.cs文件编译成动态连接库.dll文件。甚至我们把对数据库的相关操作页编译成.dll文件。

  下面是我们的与数据库连接以及操作的文件dblink.vb的主要部分,对数据库的连接:

   Dim dbl As SQLConnection

  对数据库的操作,我们把它写在一个方法里面,在返回相应值:
Function getdata() as DataView
Dim sComm as SQLDataSetCommand
Dim sDS as DataSet
Dim sStr as String
dbl = New SQLConnection("server=localhost;uid=sa;password=;database=howff")
sStr = "select * from color"
sComm = new SQLDataSetCommand(sStr,dbl)
sDS = new DataSet()
sComm.FillDataSet(sDS,"color")
Return sDS.Table["color"].DefaultView
End Function



  我们第六个语句就用到上面的与数据库的连接变量,我们这个函数的功能是从表"color"中选出所有的元素,并返回表结构的形式。完整的代码如下:


Imports System
Imports System.Data
Imports System.Data.SQL
'创建名字空间
Namespace db
'创建一个类
Public Class dblink
'建立数据库的连接
Dim dbl As SQLConnection
'方法
Public Function getdata() As DataView
Dim sComm As SQLDataSetCommand
Dim sDS As DataSet
dbl = New SQLConnection("server=localhost;uid=sa;password=;database=howff")
Dim sStr As String
sStr = "select * from color"
sComm = New SQLDataSetCommand(sStr, dbl)
'填充数据
sDS = New DataSet()
sComm.FillDataSet(sDS, "color")
'返回
Return sDS.Tables("color").DefaultView
End Function
End Class
End Namespace
我们再写一个前端掉用页面saidy.aspx,我们首先要引入我们创建的名字空间:

<%@ Import Namespace="db" %>

在页面装入的时候,我们用此方法:
Sub Page_Load(Sender As Object, E As EventArgs)
'建立一个新的对象
Dim newdb As dblink
newdb = new dblink()
'数据来源
Products.DataSource = newdb.getdata()
'数据绑定
Products.DataBind()
End Sub
下面看看我们完整的代码(advanceapp\dblink.aspx):
<%@ Import Namespace="db" %>
<html>
<script language="VB" runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
'建立一个新的对象
Dim newdb As dblink
newdb = new dblink()
'数据来源
Products.DataSource = newdb.getdata()
'数据绑定
Products.DataBind()
End Sub
</script>
<body style="font: 10pt verdana" bgcolor="CCCCFF">
<BR><BR><BR>
<CENTER>
<h3>.NET->三层架构!</h3>
</CENTER>
<BR><BR>
<CENTER>
<ASP:DataList id="Products" ShowHeader=false ShowFooter=false RepeatColumns="2" RepeatDirection="horizontal" BorderWidth=0 runat="server">
<template name="itemtemplate">
<table>
<tr>
<td width="150" style="text-align:center; font-size:8pt; vertical-align:top;
height:50">
<p>
<%# DataBinder.Eval(Container.DataItem, "id") %> <br>
<%# DataBinder.Eval(Container.DataItem, "name", "{0:C}").ToString() %>
</td>
</tr>
</table>
</template>
</ASP:DataList>
</CENTER>
</body>
</html>

  我们看到,在这个页面当中,没有出现与数据库交互的语句,这样我们就很好的把数据操作封装起来了


http://zdrjwlb.bulo. QQ群:1659819
2005-11-28 17:57
王杰
Rank: 2
等 级:新手上路
威 望:4
帖 子:307
专家分:0
注 册:2005-5-13
收藏
得分:0 

ASP.NET高级应用(3)

使用MSMQ

  MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。

  在消息传递机制中,有两个比较重要的概念。一个是消息,一个是队列。消息是由通信的双方所需要传递的信息,它可以是各式各样的媒体,如文本、声音、图象等等。消息最终的理解方式,为消息传递的双方事先商定,这样做的好处是,一是相当于对数据进行了简单的加密,二则采用自己定义的格式可以节省通信的传递量。消息可以含有发送和接收者的标识,这样只有指定的用户才能看到只传递给他的信息和返回是否操作成功的回执。消息也可以含有时间戳,以便于接收方对某些与时间相关的应用进行处理。消息还可以含有到期时间,它表明如果在指定时间内消息还未到达则作废,这主要应用与时间性关联较为紧密的应用。

  消息队列是发送和接收消息的公用存储空间,它可以存在于内存中或者是物理文件中。消息可以以两种方式发送,即快递方式(express)和可恢复模式(recoverable),它们的区别在于,快递方式为了消息的快速传递,把消息放置于内存中,而不放于物理磁盘上,以获取较高的处理能力;可恢复模式在传送过程的每一步骤中,都把消息写入物理磁盘中,以得到较好的故障恢复能力。消息队列可以放置在发送方、接收方所在的机器上,也可以单独放置在另外一台机器上。正是由于消息队列在放置方式上的灵活性,形成了消息传送机制的可靠性。当保存消息队列的机器发生故障而重新启动以后,以可恢复模式发送的消息可以恢复到故障发生之前的状态,而以快递方式发送的消息则丢失了。另一方面,采用消息传递机制,发送方必要再担心接收方是否启动、是否发生故障等等非必要因素,只要消息成功发送出去,就可以认为处理完成,而实际上对方可能甚至未曾开机,或者实际完成交易时可能已经是第二天了。

  采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代码,因而大大地提高了事物处理的能力;当信息传送过程中,信息发送机制具有一定功能的故障恢复能力;MSMQ的消息传递机制使得消息通信的双方具有不同的物理平台成为可能。

  在微软的.net平台上利用其提供的MSMQ功能,可以轻松创建或者删除消息队列、发送或者接收消息、甚至于对消息队列进行管理。

  在.NET产品中,提供了一个MSMQ类库"System.Messaging.dll"。它提供了两个类分别对消息对象和消息队列对象进行操作。在能够使用MSMQ功能之前,你必须确定你的机器上安装了MSMQ消息队列组件,并确保服务正在运行中。在使用ASP.NET编程时,应在头部使用:

   <%@ Assembly Name="System.Messaging"%>

   <%@ Import NameSpace="System.Messsaging"%>

  将MSMQ类库引入ASP.NET文件

  1. 对消息队列的创建

   dim MsgQue as MessageQueue

   MsgQue=New MessageQueue(MsgPath)

其中:MsgPath可以为本地私有队列,如".\MyQueue",也可以为其他机器的公有队列,如"Saidy\777$\MyQueue",Saidy为另一机器名。


  2. 消息的发送

   dim MsgQue as MessageQueue

   MsgQue.Send(Msg)

   其中:Msg为任一对象。

  3. 消息的接收

  消息的接收又分成同步和异步方式两种,同步接收在规定时间内从消息队列中取出收到的第一条消息,当消息队列中没有消息时,程序处于等待状态;异步接收方式则是定义了一个事件处理函数,当消息队列中第一个消息到达时立即触发该函数。

  1) 同步方式

   dim Msg as Message

  dim Fmt As XmlMessageFormatter

  Fmt= CType(MsgQue.Formatter,XmlMessageFormatter)

  Fmt.TargetTypeNames = new String(){"System.String"}

  Msg=MsgQue.receive(New TimeSpan(0,0,3))

  首先定义收到消息应转换成的格式,然后在指定时间内去接收消息

  2) 异步方式



dim Fmt As XmlMessageFormatter
'定义接收消息类型
Fmt = CType(MsgQue.Formatter,XmlMessageFormatter)
Fmt.TargetTypeNames = new String(){"System.String"}

'定义消息处理函数入口
AddHandler MsgQue.ReceiveCompleted, New ReceiveCompletedEventHandler
(AddressOf OnReceiveCompleted)

'定义消息处理函数
Public Shared Sub OnReceiveCompleted(s As Object, asyncResult As ReceiveAsyncEventArgs)
Dim MsgQue As MessageQueue = CType(s,MessageQueue)
Dim Msg As Message = MsgQue.EndReceive(asyncResult.AsyncResult)
'此时Msg.Body即为所取消息对象
MsgQue.BeginReceive()
'重新定义异步接收方式
End sub

'启动异步接收方式
MsgQue.BeginReceive


  消息队列配置属性

  关于队列的属性

   path属性:它可以决定引用队列的三种方式,路径引用、格式名引用、标识引用

   category属性:标识当前使用的队列的类型。Category是队列所有者定义的GUID值。该GUID值可以有GUID生成工具产生或者是用户自定义的数字值。GUID值不会唯一,这样才可以根据相同的GUID值,把多个消息队列划分为不同的类别(category)。

  跟发送数据类型相关的属性

   Formatter属性:决定在一个队列中如何发送和接收消息的顺序,以及可以在一个消息中发送什么样的内容。

  和队列交互相关的属性

   DenyShareReceive属性:决定同一时间内只有一个部件能够访问消息队列中的消息。

   CanRead和CanWrite属性:决定队列是否可以被读取或者是写入。

   MaximumQueueSize和MaximumJournalSize属性:以千字节为单位设置一个队列(日志队列)的消息最大容纳量。一旦接收的消息到达这个容量,新的消息将不再被接收。

  一般情况下,消息队列的最大值为消息队列管理员所设置,如果这个值没有控制的话,那么缺省的消息队列最大容量将是无限制的。

   UseJournalQueue属性::设置是否将收到的消息拷贝到日志消息队列中去。


http://zdrjwlb.bulo. QQ群:1659819
2005-11-28 17:57
felihong
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-11-26
收藏
得分:0 
王杰你真是太漂亮了
I LOVE YOU!!!

2005-11-29 12:22
nyzfl
Rank: 1
等 级:新手上路
帖 子:278
专家分:0
注 册:2005-3-21
收藏
得分:0 


My-Blog地址:http://fenglin.
2005-11-29 15:26
lanlan
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2005-11-2
收藏
得分:0 
王杰,俺喜欢你。

2005-11-29 18:26
王杰
Rank: 2
等 级:新手上路
威 望:4
帖 子:307
专家分:0
注 册:2005-5-13
收藏
得分:0 
谢谢大家的欣赏!

http://zdrjwlb.bulo. QQ群:1659819
2005-11-30 18:42
快速回复:[王杰]ASP.NET高级应用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020873 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved