日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

使用用戶定義的代理來遞送消息的制作方法

文檔序號:7911641閱讀:275來源:國知局
專利名稱:使用用戶定義的代理來遞送消息的制作方法
使用用戶定義的代理來遞送消息背景消息收發(fā)系統(tǒng)一般包括服務(wù)器組件和客戶組件。為了便于各組件之間消息的通信,各組件協(xié)定通信協(xié)議。所協(xié)定的協(xié)議陳述了定義在通信期間每一方所預(yù)期的行為的規(guī)則。不同的消息收發(fā)系統(tǒng)協(xié)定不同的協(xié)議。概述提供本概述以便以簡化形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。用戶定義的代理和連接器被定義成為消息收發(fā)應(yīng)用處理消息。所述用戶定義的代理被配置為擴(kuò)展消息收發(fā)應(yīng)用的能力。例如,可創(chuàng)建根據(jù)不由消息收發(fā)應(yīng)用本機(jī)支持的協(xié)議來添加處理消息的能力的用戶定義的代理和連接器。每個(gè)用戶定義的代理與一連接器相關(guān)聯(lián),該連接器被配置為根據(jù)指定的協(xié)議為特定地址空間路由消息。在接收到特定地址空間內(nèi)路由的消息后,服務(wù)器上的消息收發(fā)應(yīng)用調(diào)用相關(guān)聯(lián)的用戶定義的代理來處理消息。 該用戶定義的代理利用與消息收發(fā)應(yīng)用相關(guān)聯(lián)的API來協(xié)助處理消息,并且向消息收發(fā)應(yīng)用提供與處理有關(guān)的信息。附圖簡述

圖1示出計(jì)算機(jī)的計(jì)算機(jī)體系結(jié)構(gòu);圖2示出為了處理消息而使用用戶定義的代理的示例消息收發(fā)系統(tǒng);圖3示出用于使用用戶定義的代理來初始化消息收發(fā)應(yīng)用的過程;圖4示出用于使用用戶定義的代理來處理消息的過程;圖5示出用于為用戶定義的代理所支持的協(xié)議打開連接的過程;圖6示出用于使用用戶定義的代理來遞送消息的過程;以及圖7示出用于關(guān)閉與用戶定義的代理相關(guān)聯(lián)的連接的過程。詳細(xì)描述現(xiàn)在參考其中相同的標(biāo)號代表相同的元素的附圖,描述各實(shí)施例。具體地,圖1和相應(yīng)的討論旨在提供對在其中可實(shí)現(xiàn)各實(shí)施例的合適計(jì)算環(huán)境的簡要、概括描述。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)和其他類型的結(jié)構(gòu)。也可使用其他計(jì)算機(jī)系統(tǒng)配置,包括多處理器系統(tǒng)、基于微處理器的或可編程的消費(fèi)電子產(chǎn)品、小型計(jì)算機(jī)、大型計(jì)算機(jī)等等。還可使用在其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的分布式計(jì)算環(huán)境。在分布式計(jì)算環(huán)境中,程序模塊可位于本地和遠(yuǎn)程存儲器存儲設(shè)備中?,F(xiàn)在參考圖1,將描述在各實(shí)施例中利用的計(jì)算機(jī)100的說明性計(jì)算機(jī)架構(gòu)。圖1 所示的計(jì)算機(jī)體系結(jié)構(gòu)可被配置為服務(wù)器(例如,消息收發(fā)服務(wù)器)、臺式計(jì)算機(jī)、或移動計(jì)算機(jī),并且包括中央處理單元5 ( “CPU”)、包括隨機(jī)存取存儲器9 ( “RAM”)和只讀存儲器(“ROM”) 10在內(nèi)的系統(tǒng)存儲器7、以及將存儲器耦合至CPU 5的系統(tǒng)總線12?;据斎?/輸出系統(tǒng)存儲在ROM 10中,它包含幫助在諸如啟動期間在計(jì)算機(jī)內(nèi)元件之間傳遞信息的基本例程。計(jì)算機(jī)100還包括用于存儲操作系統(tǒng)16、應(yīng)用程序和其他程序模塊的大容量存儲設(shè)備14,這將在以下更為詳細(xì)地描述。大容量存儲設(shè)備14通過連接至總線12的大容量存儲控制器(未示出)連接到 CPU 5。大容量存儲設(shè)備14及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)100提供非易失性存儲。 雖然此處包含的對計(jì)算機(jī)可讀介質(zhì)的描述針對諸如硬盤或CD-ROM驅(qū)動器等大容量存儲設(shè)備,但是計(jì)算機(jī)可讀介質(zhì)可以是能夠由計(jì)算機(jī)100訪問的任何可用介質(zhì)。作為示例而非限制,計(jì)算機(jī)可讀介質(zhì)可包括計(jì)算機(jī)存儲介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲介質(zhì)包括以存儲如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等信息的任何方法或技術(shù)來實(shí)現(xiàn)的易失性和非易失性、可移動和不可移動介質(zhì)。計(jì)算機(jī)存儲介質(zhì)包括,但不限于,RAM、R0M、EPR0M、EEPR0M、閃存或其他固態(tài)存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(“DVD”) 或其他光學(xué)存儲、磁帶盒、磁帶、磁盤存儲或其他磁性存儲設(shè)備、或能用于存儲所需信息且可以由計(jì)算機(jī)100訪問的任何其他介質(zhì)。根據(jù)各實(shí)施例,計(jì)算機(jī)100使用通過諸如因特網(wǎng)等網(wǎng)絡(luò)18至遠(yuǎn)程計(jì)算機(jī)的邏輯連接在聯(lián)網(wǎng)環(huán)境中操作。計(jì)算機(jī)100可通過連接至總線12的網(wǎng)絡(luò)接口單元20來連接到網(wǎng)絡(luò) 18。網(wǎng)絡(luò)連接可以是無線的和/或有線的。網(wǎng)絡(luò)接口單元20也可用于連接到其它類型的網(wǎng)絡(luò)和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)。計(jì)算機(jī)100還可包括用于接收和處理來自多個(gè)其他設(shè)備的輸入的輸入/輸出控制器22,這些設(shè)備包括鍵盤、鼠標(biāo)或者電子指示筆(未在圖1中示出)。類似地,輸入/輸出控制器22可以為包括用戶界面觀在內(nèi)的顯示屏、打印機(jī)或其他類型的輸出設(shè)備提供輸出。用戶界面(UI) 28被設(shè)計(jì)為向用戶提供與消息收發(fā)應(yīng)用M交互的視覺方式, 以及開發(fā)一個(gè)或多個(gè)用戶定義的遞送代理。如前簡述,多個(gè)程序模塊和數(shù)據(jù)文件可以存儲在計(jì)算機(jī)100的大容量存儲設(shè)備14 和RAM 9內(nèi),包括適于控制聯(lián)網(wǎng)計(jì)算機(jī)的操作的操作系統(tǒng)16,如華盛頓州雷蒙德市的微軟公司的WINDOWS SERVER 2008 操作系統(tǒng)。大容量存儲設(shè)備14和RAM 9還可存儲一個(gè)或多個(gè)程序模塊。具體地,大容量存儲設(shè)備14和RAM 9可存儲一個(gè)或多個(gè)應(yīng)用程序。這些應(yīng)用程序中的一個(gè)是諸如MICROSOFT EXCHANGE SERVER 2010 之類的消息收發(fā)應(yīng)用Μ。一般而言,消息收發(fā)應(yīng)用M被配置為處理到達(dá)/來自各網(wǎng)絡(luò)位置的消息。連接管理器四被配置為在為消息收發(fā)應(yīng)用M處理消息的同時(shí)管理用戶定義的代理26和連接器25。創(chuàng)建每個(gè)用戶定義的代理沈以根據(jù)特定地址空間內(nèi)的指定協(xié)議來處理消息。一般而言,創(chuàng)建用戶定義的代理以根據(jù)不由消息收發(fā)應(yīng)用M本機(jī)所支持的協(xié)議來處理消息。例如,消息收發(fā)應(yīng)用M本機(jī)可被配置為使用第一和第二協(xié)議來處理消息,然而用戶定義的代理可由第三方配置以使用第三協(xié)議來處理消息。類似地,一個(gè)或多個(gè)用戶定義的代理可被配置為使用與其他代理相同的協(xié)議,但是利用不同的地址空間來處理消息。每個(gè)用戶定義的代理沈與一連接器25相關(guān)聯(lián),該連接器被配置為根據(jù)指定的協(xié)議為特定地址空間路由消息的。在接收到特定地址空間內(nèi)路由的消息后,連接管理器四調(diào)用相關(guān)聯(lián)的用戶定義的代理沈來處理消息。所調(diào)用的代理利用與消息收發(fā)應(yīng)用M相關(guān)聯(lián)的API 21來協(xié)助處理消息。一般而言,API 21向用戶定義的代理沈提供與本機(jī)代理和連接器一樣的對消息收發(fā)處理功能的訪問。例如,用戶定義的代理可將API 21用于隊(duì)列管理和診斷(S卩,消息跟蹤、連接日志、延遲跟蹤)。圖2示出為了處理消息而使用用戶定義的代理的示例消息收發(fā)系統(tǒng)。如圖所
5示,系統(tǒng)200包括消息收發(fā)服務(wù)器205、250和255。所示服務(wù)器205包括用戶定義的代理 1-M220)、連接器1-M240)、消息隊(duì)列1-M230)以及連接管理器210。服務(wù)器250和255 可被配置為與服務(wù)器205類似。系統(tǒng)200可包括更多的被配置為處理電子消息的服務(wù)器和 /或客戶端計(jì)算設(shè)備。如上所述,連接管理器210協(xié)助消息收發(fā)應(yīng)用管理用戶定義的代理220、連接器 240以及處理來自隊(duì)列230的消息。代理220內(nèi)的每個(gè)用戶定義的代理根據(jù)特定地址空間內(nèi)的指定協(xié)議來處理消息。根據(jù)一個(gè)實(shí)施例,每個(gè)用戶定義的代理220由基本類產(chǎn)生,該基本類展示了包括打開連接事件、遞送郵件事件和關(guān)閉連接事件在內(nèi)的三個(gè)事件。當(dāng)定義了用戶定義的代理時(shí),就指定了它所支持的遞送協(xié)議。在處理消息時(shí),指定的傳送協(xié)議由連接管理器210用于選定的可用的用戶定義的代理。以下是與用戶定義的代理有關(guān)的示例性定義。
public class FooDeliveryAgentManager DeliveryAgentManager
{
public override string SupportedDeliveryProtocol
{
get { return "foo";}
public class FooDeliveryAgentFactory Delivery AgentFactory<FooDeliveryAgentManager>public override DeliveryAgent CreateAgent(SmtpServer server) {
return new FooDeliveryAgent();
}
public class FooDeliveryAgent: DeliveryAgent {
public FooDeliveryAgent() {
this.OnOpenConnection += new OpenConnectionEventHandler(this. OnOpenConnectionHandler);
this.OnDeliverMailltem += new DeliverMailltemEventHandler(this.OnDeliverMailltemHandler); this. OnClo seConnection += new
CloseConnectionEventHandler(this.OnCloseConnectionHandler);
}
void source,
private
OnOpenConnectionHandler(OpenConnectionEventSource
OpenConnectionEventArgs e) {
//將要進(jìn)行打開連接 }
privatevoid
OnDeliverMailItemHandler(DeliverMailItemEventSourcesource,
DeliverMailItemEventArgs e)
7//將要進(jìn)行遞送郵件項(xiàng)
privatevoid
OnCloseConnectionHandler(CloseConnectionEventSourcesource,
CloseConnectionEventArgs e) {
//將要進(jìn)行關(guān)閉連接 }
}打開連接事件在連接管理器210確定存在下一跳類型與用戶定義的代理之一相等的消息并且用戶定義的代理的活躍調(diào)用數(shù)為零時(shí)發(fā)生。根據(jù)另一實(shí)施例,打開連接事件可在ActiveQueueLength/ActiveConnections (活躍隊(duì)列長度/活躍連接)大于MaxMessagesPerCormection (每個(gè)連接的最大消息數(shù))并且活躍調(diào)用的總數(shù)小于 AgentConnectorConfig (代理連接器配置)類上定義的 MaxConcurrentConnections (最大并發(fā)連接數(shù))時(shí)發(fā)生。激活已經(jīng)為指定的遞送協(xié)議的打開連接事件注冊的用戶定義的代理,該指定的遞送協(xié)議同與隊(duì)列中的一個(gè)相關(guān)聯(lián)的連接器匹配。根據(jù)一個(gè)實(shí)施例,如果用戶定義的代理在調(diào)用之后沒有調(diào)用由API提供的用于與消息收發(fā)應(yīng)用通信的Register Connection (注冊連接)方法,用戶定義的代理的相關(guān)聯(lián)的隊(duì)列被置為RETRY(重試)狀態(tài),并且有錯(cuò)誤消息指示沒有用戶定義的代理處理隊(duì)列(“沒有代理處理隊(duì)列”)。遞送郵件事件發(fā)生在先前為打開連接事件調(diào)用的代理已經(jīng)調(diào)用Register Connection方法,但是還沒有調(diào)用Defer Queue (推遲隊(duì)列)或!^01 Queue (失敗隊(duì)列)之后。每當(dāng)連接管理器210在相關(guān)聯(lián)的隊(duì)列中獲得下一個(gè)郵件項(xiàng)并且使代理消息知道有消息可供遞送時(shí),遞送郵件事件發(fā)生。根據(jù)一個(gè)實(shí)施例,為每個(gè)要遞送的消息生成一個(gè)事件。在遞送期間,代理使用API向消息收發(fā)應(yīng)用回過來確認(rèn)消息的遞送狀態(tài)。這一信息然后可由消息收發(fā)應(yīng)用用于協(xié)助管理對消息的處理。此外,如果代理遇到它與遠(yuǎn)程系統(tǒng)的連接上暫時(shí)或永久的故障,則它通知連接管理器210連接不再可用。如果所調(diào)用的用戶定義的代理返回而沒有確認(rèn)消息已經(jīng)被處理(沒有調(diào)用AckMailltemSuccess (確認(rèn)郵件項(xiàng)成功)、AckMailItemDefer (確認(rèn)郵件項(xiàng)推遲)、 AckMailItemFail (確認(rèn)郵件項(xiàng)失敗)、DeferQueue、FailQueue方法),則隊(duì)列內(nèi)的消息狀態(tài)被改為“RETRY”,并且伴有設(shè)為“代理返回而沒有處理消息”的錯(cuò)誤。根據(jù)一個(gè)實(shí)施例,使用默認(rèn)的時(shí)間跨度來推遲動作(例如,1分鐘、2分鐘、5分鐘等等)。用戶定義的代理還可選擇確認(rèn)郵件項(xiàng)對各個(gè)接收者的遞送,而不是一次確認(rèn)整個(gè)消息。這可用于其中消息被獨(dú)立地遞送給每個(gè)接收者的協(xié)議(諸如傳真和SMQ。確認(rèn)接收者的方法包括 AckRecipientSuccess (確認(rèn)接收者成功)、AckRecipientDefer (確認(rèn)接收者推遲)和 AckRecipientFail (確認(rèn)接收者失敗)。與使用消息收發(fā)應(yīng)用默認(rèn)的本機(jī)遞送代理處理的消息類似地對待使用用戶定義的代理處理的消息。因此,即便協(xié)議不是電子郵件服務(wù)器最初所支持的協(xié)議,消息也可被跟蹤并且具有相關(guān)聯(lián)的日志事件。根據(jù)一個(gè)實(shí)施例,消息收發(fā)應(yīng)用將簡單郵件傳輸協(xié)議 (SMTP)用作其默認(rèn)的方法以向因特網(wǎng)或者從因特網(wǎng)遞送消息。SMTP是管理電子郵件交換的TCP/IP協(xié)議套件的一員。可定義擴(kuò)展由消息收發(fā)應(yīng)用所支持的協(xié)議的一個(gè)或多個(gè)用戶定義的代理。根據(jù)一個(gè)實(shí)施例,遞送代理由第三方定義。用戶定義的代理可指定任何協(xié)議,包括但不限于SMTP連接器、FAX連接器、SMS 連接器、X. 400連接器、非標(biāo)準(zhǔn)協(xié)議連接器等等。諸如管理員之類的用戶可使用與用本機(jī)協(xié)議處理的所有其他消息相同的隊(duì)列查看工具來查看和管理在非SMTP協(xié)議上發(fā)送的消息隊(duì)列。類似地,例如掛起隊(duì)列、拒絕隊(duì)列中的消息等的操作都可以起作用。在連接管理器210確定隊(duì)列中沒有更多可用于代理的消息并且代理先前沒有調(diào)用由API提供的DeferQueue (推遲隊(duì)列)、FailQueue (失敗隊(duì)列)或UnRegister Connection(注銷連接)方法時(shí),關(guān)閉連接事件發(fā)生。在被調(diào)用時(shí),代理關(guān)閉網(wǎng)絡(luò)連接,通過調(diào)用由API提供的UnRegisterCormection (注銷連接)方法向消息收發(fā)應(yīng)用確認(rèn)連接已經(jīng)被關(guān)閉,并且返回。如果代理沒有調(diào)用UnRegisterCormection方法就返回了,或者沒有為關(guān)閉連接事件注冊的事件處理器,則消息收發(fā)應(yīng)用注銷該連接。在服務(wù)關(guān)閉后,如果存在注冊的連接,則可發(fā)生關(guān)閉連接事件。這使得代理能夠適度地關(guān)閉它與遠(yuǎn)程系統(tǒng)之間具有的任何連接。每個(gè)用戶定義的代理可定義其中調(diào)用多個(gè)連接的相關(guān)聯(lián)的隊(duì)列內(nèi)的消息的閾值, 以及該連接器的連接的最大數(shù)量。在處理隊(duì)列時(shí),如果每個(gè)已有連接的消息比由閾值定義的更多,并且如果創(chuàng)建新連接不會超過連接的最大數(shù),則連接管理器210創(chuàng)建新連接。消息隊(duì)列230可包含一個(gè)或多個(gè)不同的隊(duì)列。例如,所有消息可被存儲在單個(gè)隊(duì)列中,或者消息可被存儲在不同隊(duì)列中。根據(jù)一個(gè)實(shí)施例,每個(gè)類型的遞送代理具有相關(guān)聯(lián)的消息隊(duì)列。每個(gè)消息隊(duì)列是正在等待進(jìn)入下一處理階段的消息的暫時(shí)保持位置。根據(jù)另一實(shí)施例,消息的排隊(duì)可由連接器配置控制。在這一示例中,為遞送代理連接器的每個(gè)實(shí)例創(chuàng)建單個(gè)隊(duì)列。采用這一方式,諸如管理員之類的授權(quán)的用戶可選擇創(chuàng)建處理協(xié)議的整個(gè)地址空間的單個(gè)連接器(得到單個(gè)隊(duì)列)、或者他們可選擇用多個(gè)連接器斷開這一地址空間(得到多個(gè)隊(duì)列)。根據(jù)一個(gè)實(shí)施例,直到消息由相關(guān)聯(lián)的用戶定義的代理完全處理,并且向消息收發(fā)應(yīng)用報(bào)告該消息已經(jīng)被遞送給遠(yuǎn)程系統(tǒng)時(shí),消息收發(fā)應(yīng)用才將消息當(dāng)做已經(jīng)被遞送的。 因此,消息跟蹤日志包含對在非本機(jī)協(xié)議上傳送的消息發(fā)生了什么的準(zhǔn)確表示?,F(xiàn)在參考圖3-7,描述用于使用用戶定義的代理處理消息的示例性過程。當(dāng)閱讀對在此提供的例程的討論時(shí),應(yīng)當(dāng)理解,各實(shí)施例的邏輯操作被實(shí)現(xiàn)為(1) 運(yùn)行于計(jì)算系統(tǒng)上的一系列計(jì)算機(jī)實(shí)現(xiàn)的動作或程序模塊,和/或(2)計(jì)算系統(tǒng)內(nèi)互連的機(jī)器邏輯電路或電路模塊。該實(shí)現(xiàn)是取決于實(shí)現(xiàn)本發(fā)明的計(jì)算系統(tǒng)的性能要求來選擇的。 因此,所例示的并且構(gòu)成此處所描述的實(shí)施例的邏輯操作被不同地表示為操作、結(jié)構(gòu)設(shè)備、動作或模塊。這些操作、結(jié)構(gòu)設(shè)備、動作和模塊可用軟件、固件、專用數(shù)字邏輯,及其任何組合來實(shí)現(xiàn)。圖3示出使用用戶定義的代理來初始化消息發(fā)送應(yīng)用的過程。在開始操作之后,過程流動至操作310,在該操作處每個(gè)定義的連接器由消息收發(fā)應(yīng)用載入。根據(jù)一個(gè)實(shí)施例,每個(gè)連接器定義地址空間和遞送協(xié)議??砂ㄖT如連接的最大消息數(shù)以及最大并發(fā)連接數(shù)等其他定義。地址空間定義用戶定義的代理連接器支持的地址空間。地址空間由消息收發(fā)應(yīng)用用于定位與接收者路由地址匹配的連接器。遞送協(xié)議屬性指示由連接器支持的協(xié)議。這由消息收發(fā)系統(tǒng)使用以僅調(diào)用那些“通告”與連接器遞送協(xié)議屬性值相匹配的遞送協(xié)議的代理。每個(gè)連接的最大消息數(shù)屬性指示將在代理調(diào)用上遞送的消息的最大數(shù)。這一屬性是對用戶定義的代理的相關(guān)聯(lián)的遞送郵件處理器發(fā)生的遞送郵件事件的最大數(shù)。最大并發(fā)連接數(shù)的屬性指示代理能進(jìn)行的并發(fā)代理調(diào)用的最大數(shù)。這是將對代理的相關(guān)聯(lián)的打開連接事件處理器發(fā)生的打開連接事件的最大數(shù)。移動至操作320,確定連接器的地址空間和協(xié)議。流動至操作330,一個(gè)或多個(gè)代理與加載的連接器相關(guān)聯(lián)。基于代理所支持的協(xié)議與連接器的協(xié)議的比較,以及代理的地址空間與連接器的地址空間的比較,來選擇代理。過程然后流動至結(jié)束操作并且返回至處理其他動作。圖4示出使用用戶定義的代理來處理消息的過程。在開始操作之后,過程流動至操作410,在該操作處消息被訪問。根據(jù)一個(gè)實(shí)施例, 從與消息收發(fā)系統(tǒng)相關(guān)聯(lián)的隊(duì)列訪問消息。移動至操作420,消息被路由至適當(dāng)?shù)倪B接器。連接器是基于地址空間和協(xié)議來選擇的。流動至操作430,調(diào)用與連接器相關(guān)聯(lián)的代理。調(diào)用代理,代理可基于由消息收發(fā)系統(tǒng)發(fā)生的事件來執(zhí)行各種操作。轉(zhuǎn)至操作440,消息由選定的用戶定義的代理處理。在消息的處理期間,用戶定義的代理利用由第三方提供的功能以及由與消息收發(fā)應(yīng)用相關(guān)聯(lián)的API提供的功能。過程然后流動至結(jié)束操作并且返回至處理其他動作。圖5示出為用戶定義的代理所支持的協(xié)議打開連接的過程500。在開始操作之后,過程流動至操作510,在該操作處由消息收發(fā)應(yīng)用引發(fā)打開連接事件。移動至操作520,調(diào)用由相關(guān)聯(lián)的用戶定義的代理提供的打開連接處理器。轉(zhuǎn)至操作530,代理代開一個(gè)或多個(gè)到遠(yuǎn)程系統(tǒng)的網(wǎng)絡(luò)連接。根據(jù)一個(gè)實(shí)施例,用戶定義的代理通知消息收發(fā)通過API應(yīng)用連接被打開。流動至操作M0,代理嘗試遞送位于與代理相關(guān)聯(lián)的隊(duì)列中的任意消息。過程然后流動至結(jié)束操作并且返回至處理其他動作。圖6示出使用用戶定義的代理來遞送消息的過程。在開始操作之后,過程流動至操作610,在該操作處響應(yīng)于由消息收發(fā)應(yīng)用引發(fā)的遞送郵件項(xiàng)事件,調(diào)用由用戶定義的代理提供的郵件處理器。郵件處理器在隊(duì)列中有消息并且用戶定義的代理已經(jīng)建立與遠(yuǎn)程主機(jī)之間的網(wǎng)絡(luò)連接時(shí)被調(diào)用。移動至操作620,代理嘗試遞送正在被處理的當(dāng)前消息。
10
轉(zhuǎn)至判定操作630,作出消息是否被成功遞送的判斷。當(dāng)消息被成功遞送時(shí),過程移動至操作640,在該操作處用戶定義的代理通過API通知消息收發(fā)應(yīng)用消息已經(jīng)被成功遞送。當(dāng)消息沒有被成功遞送時(shí),過程流動至判定操作635,在該操作處作出消息是否是因?yàn)闀簳r(shí)的消息故障而沒有被遞送的判斷。當(dāng)存在暫時(shí)的消息故障時(shí),過程返回至框620, 在該方框處嘗試消息遞送。根據(jù)一個(gè)實(shí)施例,這一返回至嘗試遞送消息可被設(shè)置為等待預(yù)定長度的時(shí)間。當(dāng)沒有暫時(shí)的消息故障時(shí),過程移動至判定操作645以確定是否有永久的消息故障。當(dāng)存在永久的消息故障時(shí),過程移動至操作650,在該操作處通過API向消息收發(fā)應(yīng)用提供消息故障的確認(rèn)。當(dāng)沒有永久的消息故障時(shí),過程移動至判定操作655以確定是否有暫時(shí)的連接故障。當(dāng)存在暫時(shí)的連接故障時(shí),過程移動至操作660,在該操作處代理的隊(duì)列內(nèi)的消息的遞送被推遲了一定的時(shí)間段。當(dāng)沒有暫時(shí)的連接故障時(shí),過程移動至操作665,在該操作處隊(duì)列遞送在代理通知消息收發(fā)應(yīng)用隊(duì)列故障時(shí)失敗。過程然后流動至結(jié)束操作并且返回至處理其他動作。圖7示出用于關(guān)閉與用戶定義的代理相關(guān)聯(lián)的連接的過程。在開始操作之后,過程流動至操作710,在該操作處關(guān)閉連接事件由消息收發(fā)應(yīng)用引發(fā)。移動至操作720,調(diào)用代理的關(guān)閉連接處理器。流動至操作730,代理關(guān)閉與遠(yuǎn)程主機(jī)之間的連接。過程然后移動至操作740,在該操作處代理通過API通知消息收發(fā)應(yīng)用連接被關(guān)閉,并且作為響應(yīng),消息收發(fā)應(yīng)用注銷連接。過程然后流動至結(jié)束操作并且返回至處理其他動作。以上說明、示例和數(shù)據(jù)提供了對本發(fā)明的組成部分的制造和使用的全面描述。因?yàn)榭梢栽诓槐畴x本發(fā)明的精神和范圍的情況下做出本發(fā)明的許多實(shí)施例,所以本發(fā)明落在所附權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種用于處理電子消息的方法,所述方法在計(jì)算機(jī)的處理器上執(zhí)行,包括訪問消息G10);為消息選擇連接器G20);使用消息收發(fā)應(yīng)用將消息路由至選定的連接器G20);以及消息收發(fā)應(yīng)用為連接器調(diào)用用戶定義的代理以處理消息G30);其中所述用戶定義的代理為消息收發(fā)應(yīng)用未支持的協(xié)議提供支持。
2.如權(quán)利要求1所述的方法,其特征在于,所述連接器包括由與消息收發(fā)應(yīng)用的開發(fā)者不同的第三方定義的地址空間屬性以及支持的協(xié)議屬性(320)。
3.如權(quán)利要求2所述的方法,其特征在于,所述為消息選擇連接器包括為消息確定路由地址以及從屬性多個(gè)連接器中選擇與地址空間屬性匹配的連接器(420)。
4.如權(quán)利要求2所述的方法,其特征在于,所述用戶定義的代理執(zhí)行包括以下各項(xiàng)的操作將消息遞送至遠(yuǎn)程網(wǎng)絡(luò)地址以及通知消息收發(fā)應(yīng)用所述消息遞送的成功和失敗 (640)。
5.如權(quán)利要求4所述的方法,其特征在于,所述通知通過與消息收發(fā)應(yīng)用相關(guān)聯(lián)的應(yīng)用編程接口(API) (21)進(jìn)行。
6.如權(quán)利要求4所述的方法,其特征在于,所述用戶定義的代理在由消息收發(fā)應(yīng)用引發(fā)的打開連接事件、遞送郵件事件以及關(guān)閉連接事件時(shí)被調(diào)用(510)。
7.如權(quán)利要求4所述的方法,其特征在于,所述打開連接事件是響應(yīng)于沒有用戶定義的代理的實(shí)例以及響應(yīng)于需要更多的用戶定義的代理的實(shí)例以處理與用戶定義的代理相關(guān)聯(lián)的消息的處理而由消息收發(fā)應(yīng)用引發(fā)的(510)。
8.如權(quán)利要求5所述的方法,其特征在于,所述用戶定義的代理將API用于對消息的隊(duì)列管理和診斷。
9.一種具有使用與消息收發(fā)應(yīng)用相關(guān)聯(lián)的用戶定義的遞送代理來處理消息的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲介質(zhì),包括訪問要使用第一協(xié)議遞送的消息;其中所述第一協(xié)議不被消息收發(fā)應(yīng)用支持G10);從一組連接器中為消息選擇連接器G20);將消息路由至選定的連接器G20);以及消息收發(fā)應(yīng)用為連接器調(diào)用用戶定義的代理以使用第一協(xié)議來處理消息G30);其中所述用戶定義的代理為使用第一協(xié)議遞送消息提供支持;以及用戶定義的代理利用由消息收發(fā)應(yīng)用提供的API (21)來提供消息遞送狀態(tài)。
10.如權(quán)利要求9所述的計(jì)算機(jī)可讀存儲介質(zhì),其特征在于,所述每個(gè)連接器定義地址空間和支持的協(xié)議(320)。
11.如權(quán)利要求10所述的計(jì)算機(jī)可讀存儲介質(zhì),其特征在于,所述選擇連接器包括為消息確定路由地址以及選擇具有與路由地址匹配的地址空間的連接器(420)。
12.一種使用擴(kuò)展了消息收發(fā)應(yīng)用的協(xié)議支持的用戶定義的代理來處理消息的系統(tǒng), 包括處理器( 和計(jì)算機(jī)可讀介質(zhì)(14);存儲在所述計(jì)算機(jī)可讀介質(zhì)上并在所述處理器上執(zhí)行的操作環(huán)境(16);網(wǎng)絡(luò)連接(20);被配置為存儲供遞送到遠(yuǎn)程地址的消息隊(duì)列(230);在服務(wù)器上操作并且被配置為執(zhí)行任務(wù)的消息收發(fā)應(yīng)用04)和連接管理器09);所述任務(wù)包括從消息隊(duì)列訪問消息GlO);基于遠(yuǎn)程地址為消息選擇連接器G20);將消息路由至選定的連接器G20);以及調(diào)用由第三方定義的用戶定義的代理G30);其中所述用戶定義的代理打開到遠(yuǎn)程地址的連接(530);遞送消息(540);在消息遞送成功時(shí)關(guān)閉連接(730)并且通知消息收發(fā)應(yīng)用與消息遞送有關(guān)的成功(640)。
13.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述選擇連接器包括從多個(gè)連接器中確定與消息的地址空間和協(xié)議匹配的連接器(420)。
14.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述用戶定義的代理在由消息收發(fā)應(yīng)用引發(fā)的打開連接事件、遞送郵件事件和關(guān)閉連接事件時(shí)由消息收發(fā)應(yīng)用調(diào)用;所述用戶定義的代理為打開連接事件、遞送郵件事件和關(guān)閉連接事件提供處理器(510)。
15.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述打開連接事件是響應(yīng)于沒有用戶定義的代理的實(shí)例以及響應(yīng)于需要更多的用戶定義的代理的實(shí)例以處理與用戶定義的代理相關(guān)聯(lián)的消息的處理而由消息收發(fā)應(yīng)用引發(fā)的(510)。
全文摘要
用戶定義的代理和連接器被定義成為消息收發(fā)應(yīng)用處理消息。所述用戶定義的代理被配置為擴(kuò)展消息收發(fā)應(yīng)用的能力。每個(gè)用戶定義的代理與一連接器相關(guān)聯(lián),該連接器被配置為根據(jù)指定的協(xié)議為特定地址空間路由消息。在接收到特定地址空間內(nèi)路由的消息后,服務(wù)器上的消息收發(fā)應(yīng)用調(diào)用相關(guān)聯(lián)的用戶定義的代理來處理消息。該用戶定義的代理利用與消息收發(fā)應(yīng)用相關(guān)聯(lián)的API來協(xié)助處理消息。
文檔編號H04L12/58GK102449980SQ201080024679
公開日2012年5月9日 申請日期2010年5月28日 優(yōu)先權(quán)日2009年5月29日
發(fā)明者J·B·凱, S·諾薩利希, T·C·盧蒂寧, V·W·H·博克特 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1