|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP一般认为只能运行在IIS上,正如前面所提到的,这并不是十分正确,事实上,ASP也能运行在Apache上。ApacheASP可在任意Apache服务器上运行有限的ASP功能,所需做的,只需打开mod_perl。办理|历程|成绩在ASP中利用MSMQ
当ASP程序由于某个历程消费了太长的工夫而招致在客户端过时时,
当会见者已保持了对你的网站的会见而分开往了其余网站时。
或则你的服务器上堵塞了大批的逝世行列时,毛病"Serveristoobusy"
产生了。
当你在计划网站的过程当中碰着这些成绩时,一个办理举措就是利用
MicrosoftMessageQueue(MSMQ)来停止这些历程。
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.
MSQMQueueInfo
MSMQQueueInfo同意你新建,翻开,删除行列中的动静.要和行列创建接洽起首必要设置
PathName,这是一个定名行列的属性,它告知MSQM是哪台呆板上的行列。
<%
DimobjQueueInfo
DimobjQueue
SetobjQueueInfo=Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName=".MyQueue"
SetobjQueue=objQueueInfo.Open(MQ_SEND_ACCESS,MQ_DENY_NONE)
%>
下面的代码翻开一个叫MyQueue的当地行列.假如行列在别的一台服务器上,代码应当是如许的
objQueue.PathName="SomeOtherComputerMyQueue"
翻开行列中有两个参数:Access和ShareMode.Access暗示将要对行列实行甚么操纵。
一样平常有三个操纵:
MQ_PEEK_ACCESS(32),MQ_RECEIVE_ACCESS(1),MQ_SEND_ACCESS(2).
MQ_PEEK_ACCESS用来在特定的行列中查找动静。但对该动静不举行操纵。
MQ_RECEIVE_ACCESS用来在读取行列中的动静后删除它。
MQ_SEND_ACCESSis用来在行列中发送动静,但不吸收动静.
注重的是利用翻开操纵后前往了一个MSMQQueue工具.
上面是一个典范的新建和删除操纵:
<%
DimobjQueue
SetobjQueue=Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName=".MyQueue"
objQueue.Create
%>
<%
DimobjQueue
SetobjQueue=Server.CreateObject("MSMQ.MSMQQueueInfo")
objQueue.PathName=".MyQueue"
objQueue.Delete
%>
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=".MyQueue"
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事务
当同步猎取动静时,会一向比及动静可猎取或则超不时程序才会不被挂起。
代码以下:
</p>缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。 |
|