av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

WCF服務(wù)寄宿相關(guān)使用概念詳解

WCF開發(fā)工具是一個(gè)建立于.Net Framework 2.0基礎(chǔ)上的一個(gè)功能強(qiáng)大的開發(fā)插件,那么如何才能正確的應(yīng)用這一插件來(lái)幫助我們?cè)趯?shí)際開發(fā)中獲得幫助呢?這首先就需要我們來(lái)熟練掌握一些應(yīng)用技巧,比如今天為大家介紹的WCF服務(wù)寄宿的相關(guān)內(nèi)容。

在默認(rèn)的情況下,基于IIS的服務(wù)寄宿是通過(guò)一個(gè)特殊的HttpModule實(shí)現(xiàn)的,其類型為System.ServiceModel.Activation.HttpModule,是一個(gè)定義在System.ServiceModel程序集中的內(nèi)部類型。HttpModule的定義大體上如下面的代碼所示,我們很清楚地看到其實(shí)現(xiàn)的原理:將實(shí)現(xiàn)WCF Service請(qǐng)求處理的邏輯注冊(cè)到HttpApplication的PostAuthenticationRequest事件中。

 
 
 
  1. internal class HttpModule : IHttpModule   
  2. {   
  3. //其他成員   
  4. public void Init(HttpApplication context)   
  5. {   
  6. context.PostAuthenticateRequest += new EventHandler
    (HttpModule.ProcessRequest);   
  7. }   
  8. private static void ProcessRequest
    (object sender, EventArgs e)   
  9. {   
  10. //服務(wù)請(qǐng)求處理實(shí)現(xiàn)   
  11. }   

System.ServiceModel.Activation.HttpModule是一個(gè)特殊的HttpModule,說(shuō)它特別是因?yàn)楫?dāng)HttpModule注冊(cè)到HttpApplication的PostAuthenticateRequest事件處理程序執(zhí)行后,不會(huì)再將請(qǐng)求進(jìn)一步分發(fā)給后續(xù)的請(qǐng)求處理步驟。換句話說(shuō),就HttpApplication從BeginRequest到EndRequest整個(gè)請(qǐng)求處理的生命周期來(lái)說(shuō),對(duì)于基于.svc文件的請(qǐng)求僅僅延續(xù)到PostAuthenticateRequest階段。我們可以通過(guò)一種簡(jiǎn)單的方式來(lái)證明這一點(diǎn)。

假設(shè)我們有一個(gè)WCF服務(wù)寄宿需要通過(guò)IIS進(jìn)行寄宿,并把WCF服務(wù)相應(yīng)的.svc文件定義在一個(gè)對(duì)應(yīng)于某個(gè)IIS虛擬目錄的ASP.NET Website中。現(xiàn)在我們?yōu)橹砑右粋€(gè)global.asax,在該global.asax,我通過(guò)如下的代碼注冊(cè)了HttpApplication處理請(qǐng)求的前三個(gè)事件:BeginRequest、AuthenticateRequest和PostAuthenticateRequest,當(dāng)這3個(gè)事件觸發(fā)后,將一段代表當(dāng)前事件的名稱寫入EventLog中。

 
 
 
  1. <%@ Application Language="C#" %>   
  2. <%@ Import Namespace= "System.Diagnostics"%>   
  3.    
  4. void Application_BeginRequest(object sender, EventArgs e)   
  5. {   
  6. string message = string.Format("BeginRequest Event is 
    raised at {0}", DateTime.Now);   
  7. EventLog.WriteEntry("Application", message, 
    EventLogEntryType.Information);   
  8. }   
  9. void Application_AuthenticateRequest(object sender, EventArgs e)   
  10. {   
  11. string message = string.Format("AuthenticateRequst Event 
    is raised at {0}",DateTime.Now);   
  12. EventLog.WriteEntry("Application", message, 
    EventLogEntryType.Information);   
  13. }   
  14. void Application_PostAuthenticateRequest(object sender, EventArgs e)   
  15. {   
  16. string message = string.Format("PostAuthenticateRequest 
    Event is raised at {0}", DateTime.Now);   
  17. EventLog.WriteEntry("Application", message, 
    EventLogEntryType.Information);   
  18. }   
  19.  

如果我們上面的說(shuō)法成立的話,只有HttpApplication的最初3個(gè)事件被觸發(fā)。此外,HttpModule注冊(cè)的操作會(huì)先于定義在global.asax的Application_PostAuthenticateRequest方法執(zhí)行,那么在整個(gè)服務(wù)調(diào)用過(guò)程中,只有Application_BeginRequest和Application_AuthenticateRequest這兩個(gè)方法會(huì)被執(zhí)行。這一點(diǎn)我們可以從EventLog得到證實(shí)。當(dāng)我們通過(guò)執(zhí)行案例7-2中的代表客戶端應(yīng)用程序后,EventLog中WindowsLog的Application分組中,會(huì)多出兩個(gè)日志項(xiàng)目(之前已經(jīng)將日志清空)。#t#

日志的內(nèi)容正是我們?cè)贏pplication_BeginRequest和Application_AuthenticateRequest方法中定義的日志文本??梢妰H僅這兩個(gè)方法被成功執(zhí)行,Application_PostAuthenticateRequest方法卻沒(méi)有被執(zhí)行??梢韵胂?,后續(xù)的事件也不可能被觸發(fā)。

到現(xiàn)在為止,我們僅僅是介紹了如何處理基于.svc文件的請(qǐng)求,并沒(méi)有說(shuō)明.svc文件對(duì)應(yīng)的WCF Service是如何被寄宿的。WCF服務(wù)寄宿發(fā)生在對(duì)服務(wù).svc文件的***次訪問(wèn),具體的實(shí)現(xiàn)很簡(jiǎn)單:ServiceMode根據(jù)請(qǐng)求的目的地址加載相應(yīng)的.svc文件,通過(guò)解析定義在<%ServiceHost%>指令的Factory和Service屬性得到ServiceHostFactory和Service的類型(Factory默認(rèn)為System.ServiceMode.ServiceHostFactory),通過(guò)反射創(chuàng)建繼承自基類System.ServiceModel.Activation.ServiceHostFactoryBase的ServiceHostFactory對(duì)象。***通過(guò)ServiceHostFactory創(chuàng)建的繼承自基類System.ServiceModel.ServiceHostBase的ServieHost對(duì)象對(duì)Serivce進(jìn)行WCF服務(wù)寄宿。


當(dāng)前名稱:WCF服務(wù)寄宿相關(guān)使用概念詳解
轉(zhuǎn)載源于:http://uogjgqi.cn/article/dhdigdo.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流