|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP是依赖组件的,能访问数据库的组件好多就有好多种,再有就是你微软的工具可是什么都要收钱的啊!历程|把持我们在利用ASP程序经常常会碰到这些情形:某个历程消费了太长的工夫而招致在客户端过时、会见者已保持了对你的网站的会见而分开往了其余网站、或你的服务器上堵塞了大批的逝世行列时,体系呈现"Serveristoobusy"毛病信息。
当你在计划网站的过程当中碰着这些成绩时,一个无效的办理举措就是利用MicrosoftMessageQueue(MSMQ)来停止这些历程,让网站恢复一般!
究竟MSMQ是个甚么样的器材呢?我们上面作一下懂得:
1、MicrosoftMessageQueue的基础先容:
MSMQ(代号又叫"Falcon")是运转在WindowsNT的服务,它供应使用程序之间的异步通信。你能够在NT4OptionPack中找到它。MSMQ的基础观点十分的复杂:它能够被当作是使用程序之间的email:一个动静被打包到一个特定范例的容器中,并把这个动静保留到一个用与出格感化的行列中直到收信者承受该动静为止。这些行列可以确保MSMQ的传送,而不论以后收集毗连的情况怎样。
象一切的电子邮件一样,MSMQ动静有一个发送者和一个吸收者,个中的吸收者应当可以会见行列。一个单一行列中的一个独自动静,它具有多个承受者比方respinder。而动静的发送者一般是WebServer(IIS)。
MSMQ也可以和其他动静体系举行通信。比方:SunSolaris,HP-UNIX,OS/2,VMS,AS/400平台。像其他的BackOffice服务一样,MSMQ有一个COMAPI(mqoa.dll)供应给开辟者开辟程序。个中最经常使用的三个类为:MSMQQueueInfo,MSMQQueue,MSMQMessage。
(1)、MSQMQueueInfo
MSMQQueueInfo同意你新建,翻开,删除行列中的动静.要和行列创建接洽起首必要设置PathName,这是一个定名行列的属性,它告知MSQM是哪台呆板上的行列。
<%
DimobjQueueInfo
DimobjQueue
SetobjQueueInfo=Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName=".MyQu"
SetobjQueue=objQueueInfo.Open(MQ_SEND_ACCESS,MQ_DENY_NONE)
%>
下面的代码翻开一个叫MyQueue的当地行列。假如行列在别的一台服务器上,代码应当是如许的:
objQueue.PathName="SomeOtherComputerMyQu"
翻开行列中有两个参数: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工具。上面是一个典范的新建和删除操纵例子:
<%
DimobjQueue
SetobjQueue=Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName=".MyQu"
objQueue.Create
%>
<%
DimobjQueue
SetobjQueue=Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName=".MyQu"
objQueue.Delete
%>
(2)、MSMQQueue
MSMQQueue类用来形貌一个在MSMQ服务中翻开的行列。该类供应了一个用来在指针行列中的动静举行轮回的功效。你不克不及够翻开一个利用了MSMQQueue类的行列要这么干只可以利用MSQMQueueInfo(见上例),固然很多ASP使用程序一般利用MSMQ来发动静,可是良多时分也必要ASP来显现这个动静的详细内容。
猎取动静的体例有两种:同步体例,异步体例,可是ASP只可以利用同步体例。这是由于ASP不克不及够在服务端声名一个WithEvents变量。
上面先举一个异步体例利用MSMQ的例子(仅VB中)
OptionExplicit
Dimm_objQueueInfoAsNewMSMQQueueInfo
Dimm_objQueueAsMSMQQueue
DimWithEventsm_objMSMQEventAsMSMQEvent
PrivateSubForm_Load()
m_objQueueInfo.PathName=".MyQu"
m_objQueueInfo.Label="MySampleQueue"
OnErrorResumeNext
m_objQueueInfo.Create
OnErrorGoTo0
Setm_objQueue=m_objQueueInfo.Open(MQ_RECEIVE_ACCESS,MQ_DENY_NONE)
Setm_objMSMQEvent=NewMSMQEvent
m_objQueue.EnableNotificationm_objMSMQEvent,MQMSG_CURRENT,1000
EndSub
PrivateSubm_objMSMQEvent_Arrived(ByValQueueAsObject,ByValCursorAsLong)
Dimm_objMessageAsMSMQMessage
Setm_objMessage=Queue.PeekCurrent
MsgBox"MessageReceived:"&m_objMessage.Label
m_objQueue.EnableNotificationm_objMSMQEvent,MQMSG_NEXT,10000
EndSub
PrivateSubm_objMSMQEvent_ArrivedError(ByValQueueAsObject,ByValErrorCodeAsLong,ByValCursorAsLong)
MsgBox"Erroraccorded:"&ErrorCode
EndSub
这段代码起首创建一个行列(假如它还不存在的话)。然后m_objMSMQEvent工具经由过程挪用EnableNotification毗连到MSMQQueue工具。一旦毗连到MSMQEvent工具,接上去需做的仅仅是完成Arrived和Arrived_Error(可选的)事务。Arrived事务当一个新的动静抵达行列时将被触发该事务前往两个指针,一个是指向行列中应当历来入手下手读动静的地位,别的一个是以后的地位。假如产生毛病,将触发ArrivedError事务当同步猎取动静时,会一向比及动静可猎取或则超不时程序才会不被挂起。代码以下:
PublicSubDisplayMessages()
DimobjQueueInfoAsNewMSMQQueueInfo
DimobjQueueAsMSMQQueue
DimobjMessageAsMSMQMessage
objQueueInfo.PathName=".MyQu"
objQueueInfo.Label="MySampleQueue"
OnErrorResumeNext
objQueueInfo.Create
OnErrorGoTo0
SetobjQueue=objQueueInfo.Open(MQ_RECEIVE_ACCESS,MQ_DENY_NONE)
DoWhileTrue
SetobjMessage=objQueue.Peek(,,1000)
IfobjMessageIsNothingThenExitDo
MsgBox"Message:"&objMessage.Label
Loop
MsgBox"Nomorenewmessages."
objQueue.Close
SetobjMessage=Nothing
SetobjQueue=Nothing
SetobjQueueInfo=Nothing
EndSub
(3)、MSMQMessage
MSMQMessage类撑持行列中动静的一切属性。MSMQ动静有两个办法和单一的属性。</p>ActiveServerPage技术为应用开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效果。在讨论ASP的安全性问题之前,让我们来看看ASP是怎么工作的。 |
|