ASP编程:懂得MSMQ,掌握ASP历程 (一)
写软件都是想的时间比写的时间要长的.如果反过来了就得看看是什么原因了. 另外大家可以回去问问公司里的小MM.(一般企业里,跟你们交付软件接触得最多的是她们) 咱们在利用 ASP 法式经常常会碰到这些情形:某个历程消费了太长的工夫而招致在客户端过时、会见者已保持了对你的网站的会见而分开去了其余网站、或你的办事器上壅塞了大批的逝世队列时,体系呈现 "Server is too busy" 毛病信息。当你在设计网站的过程当中碰着这些成绩时,一个无效的处理举措就是利用 Microsoft Message Queue (MSMQ) 来停止这些历程,让网站恢复正常!
究竟 MSMQ 是个甚么样的器材呢?咱们上面作一下懂得:
1、 Microsoft Message Queue 的根基引见:
MSMQ ( 代号又叫 "Falcon") 是运转在 Windows NT 的办事 , 它供应应用法式之间的异步通信。你可以在 NT4 Option Pack 中找到它。 MSMQ 的根基概念十分的复杂:它可以被当作是应用法式之间的 email :一个动静被打包到一个特定类型的容器中,并把这个动静保留到一个用与出格感化的队列中直到收信者承受该动静为止。这些队列可以确保 MSMQ 的传送,而不论以后收集毗连的情况若何。
象一切的电子邮件一样, MSMQ 动静有一个发送者和一个吸收者 , 个中的吸收者应当可以会见队列。一个单一队列中的一个独自动静,它具有多个承受者例如 respinder 。而动静的发送者凡是是 Web Server(IIS) 。
MSMQ 也可以和其他动静体系停止通信。例如: Sun Solaris, HP-UNIX,OS/2, VMS, AS/400 平台。像其他的 BackOffice 办事一样, MSMQ 有一个 COM API ( mqoa.dll ) 供应给开辟者开辟法式。个中最经常使用的三个类为: MSMQQueueInfo, MSMQQueue, MSMQMessage 。
( 1 )、 MSQMQueueInfo
MSMQQueueInfo 答应你新建,翻开,删除队列中的动静 . 要和队列创立接洽起首需求设置 PathName ,这是一个定名队列的属性,它告知 MSQM 是哪台机械上的队列。
< %
Dim objQueueInfo
Dim objQueue
Set objQueueInfo=Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName = ".\MyQu"
Set objQueue = objQueueInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)
%>
下面的代码翻开一个叫 MyQueue 的当地队列。假如队列在别的一台办事器上,代码应当是如许的:
objQueue.PathName = "SomeOtherComputer\MyQu"
翻开队列中有两个参数: Access 和 ShareMode 。 Access 暗示将要对队列履行甚么操作。普通有三个操作:
MQ_PEEK_ACCESS (32), MQ_RECEIVE_ACCESS (1), MQ_SEND_ACCESS (2) 。
MQ_PEEK_ACCESS 用来在特定的队列中查找动静。但对该动静不停止操作。
MQ_RECEIVE_ACCESS 用来在读取队列中的动静后删除它。
MQ_SEND_ACCESS 用来在队列中发送动静 , 但不吸收动静。
需求注重的是在利用翻开操作后前往了一个 MSMQQueue 对象。上面是一个典范的新建和删除操作例子:
< %
Dim objQueue
Set objQueue = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName = ".\MyQu"
objQueue.Create
%>
< %
Dim objQueue
Set objQueue = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName = ".\MyQu"
objQueue.Delete
%>
( 2 )、 MSMQQueue
MSMQQueue 类用来描写一个在 MSMQ 办事中翻开的队列。该类供应了一个用来在指针队列中的动静停止轮回的功效。你不克不及够翻开一个利用了 MSMQQueue 类的队列要这么干只可以利用 MSQMQueueInfo (见上例),固然很多 ASP 应用法式凡是利用 MSMQ 来发动静,然而良多时分也需求 ASP 来显示这个动静的详细内容。
获得动静的体例有两种:同步体例,异步体例,然而 ASP 只可以利用同步体例。这是由于 ASP 不克不及够在办事端声名一个 WithEvents 变量。
上面先举一个异步体例利用 MSMQ 的例子(仅 VB 中)
Option Explicit
Dim m_objQueueInfo As New MSMQQueueInfo
Dim m_objQueue As MSMQQueue
Dim WithEvents m_objMSMQEvent As MSMQEvent
Private Sub Form_Load()
m_objQueueInfo.PathName = ".\MyQu"
m_objQueueInfo.Label = "My Sample Queue"
On Error Resume Next
m_objQueueInfo.Create
On Error GoTo 0
Set m_objQueue = m_objQueueInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
Set m_objMSMQEvent = New MSMQEvent
m_objQueue.EnableNotification m_objMSMQEvent, MQMSG_CURRENT, 1000
End Sub
Private Sub m_objMSMQEvent_Arrived(ByVal Queue As Object, ByVal Cursor As Long)
Dim m_objMessage As MSMQMessage
Set m_objMessage = Queue.PeekCurrent
MsgBox "Message Received: " & m_objMessage.Label
m_objQueue.EnableNotification m_objMSMQEvent, MQMSG_NEXT, 10000
End Sub
Private Sub m_objMSMQEvent_ArrivedError(ByVal Queue As Object, ByVal ErrorCode As Long, ByVal Cursor As Long)
MsgBox "Error accorded: " & ErrorCode
End Sub
这段代码起首创立一个队列(假如它还不存在的话)。然后 m_objMSMQEvent 对象经由过程挪用 EnableNotification 毗连到 MSMQQueue 对象。一旦毗连到 MSMQEvent 对象 , 接上去需做的仅仅是完成 Arrived 和 Arrived_Error ( 可选的 ) 事务。 Arrived 事务当一个新的动静抵达队列时将被触发该事务前往两个指针 , 一个是指向队列中应当历来入手下手读动静的地位,别的一个是以后的地位。假如产生毛病,将触发 ArrivedError 事务当同步获得动静时,会一向比及动静可获得或则超不时法式才会不被挂起。代码以下:
Public Sub DisplayMessages()
Dim objQueueInfo As New MSMQQueueInfo
Dim objQueue As MSMQQueue
Dim objMessage As MSMQMessage
objQueueInfo.PathName = ".\MyQu"
objQueueInfo.Label = "My Sample Queue"
On Error Resume Next
objQueueInfo.Create
On Error GoTo 0
Set objQueue = objQueueInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
Do While True
Set objMessage = objQueue.Peek(, , 1000)
If objMessage Is Nothing Then Exit Do
MsgBox "Message: " & objMessage.Label
Loop
MsgBox "No more new messages."
objQueue.Close
Set objMessage = Nothing
Set objQueue = Nothing
Set objQueueInfo = Nothing
End Sub
( 3 )、 MSMQMessage
MSMQMessage 类撑持队列中动静的一切属性。 MSMQ 动静有两个办法和单一的属性。个中两个最次要的属性是: Body 和 LabeL 。最次要的办法有 Send 。有两种办法来获得动静: opening , peeking 。当利用 opening 体例后,该动静将会被删除失落;当利用 peeking 体例后,该动静依然保留在队列中直到它过时。它们的前往值都是指向该动静的指针。下例的代码将翻开一个动静,并显示其 Body 和 Label
Private Sub LookForMessage()
Dim objQInfo As New MSMQQueueInfo
Dim objQReceive As MSMQQueue
Dim objMessage As MSMQMessage
objQInfo.PathName = ".\test"
Set objQReceive = objQInfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)
Set objMessage = objQReceive.Receive(, , , 1000)
If Not objMessage Is Nothing Then
MsgBox objMessage.Label & " - " & objMessage.Body
Else
Msgbox "Nothing in the queue"
End If
objQReceive.Close
Set objQInfo = Nothing
Set objQReceive = Nothing
Set objMessage = Nothing
End Sub
这段代码翻开一个队列并在该队列中查找动静,利用 Receive 办法,次要是设置一个 1000 微秒的超时 , 它告知 MSMQ1000 微秒后中断查找设置一个十分段的超时的功效次要是用来反省是不是存在动静而不是等待一个动静。也就是说假如你常识想看看是不是有动静可使用该办法。假如无动静,前往的指针为空 (If Not objMessage Is Nothing) 。上面是发送一个动静的代码:
< %
Dim objQInfo
Dim objQSend
Dim objMessage
Set objQInfo = Server.CreateObject("MSMQ.MSMQQueueInfo")
objQInfo.PathName = ".\test"
Set objQSend = objQInfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)
Set objMessage = Server.CreateObject("MSMQ.MSMQMessage")
objMessage.Label = "This is the label."
objMessage.Body = "This is the body."
objMessage.Send objQSend
objQSend.Close
Set objQInfo = Nothing
Set objQSend = Nothing
Set objMessage = Nothing
%>
关于 MSMQ 的有关根基常识咱们已做了举例引见,上面迁就它的详细应用停止的懂得及切磋!Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助... 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。 Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件) 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
页:
[1]