WSE 3.0 和 WS-ReliableMessaging

资讯 2024-07-10 阅读:51 评论:0
發行項 06/30/2006   George Copelan...
美化布局示例

欧易(OKX)最新版本

【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   全球官网 大陆官网

币安(Binance)最新版本

币安交易所app【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

火币HTX最新版本

火币老牌交易所【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

 

George Copeland
架構師

George Hopeland
Architecture

2005 年 6 月

June 2005

適用於:
   Microsoft .NET 的 Web 服務增強功能 3.0
   WS-ReliableMessaging (WS-RM) 規格

& nbsp; & nbsp; & nbsp; & nbsp; Microsoft.NET service enhancement function 3.0
& nbsp; & nbsp; & nbsp; WS-ReliableMessaging (WS-RM)

總結: 本文提供 WSE 3.0 可靠傳訊 (WseRM) 的概觀。 這是 WSE 3.0 的範例程式碼參考實作,可實作WS-ReliableMessaging (WS-RM) 規格的最新草稿。 本文會先說明 WS-RM 適用的案例,然後提供 WS-RM 規格的概觀,最後會定義 WseRM 的範圍和目標。 相關聯的 MSI 下載中會提供 WseRM 參考實作的詳細檔、範例和完整的原始程式碼。 (17 個列印的頁面)

Summary: provides an overview of WSE 3.0 Reliable Messages (WSRM). This is the latest draft of the WS-ReliableMessaging (WS-RM) code for the WS-ReliableMessaging (WS-RM) code for WS-RM. This text will first describe the appropriate case for WS-RM, then provide an overview of the WS-RM regulations, and eventually define the scope and objectives of WSRM. Associated MSI downloads will provide details, examples and full original code for WSRM references. (17 printed pages)

下載相關聯的範例程式碼 Microsoft WSE 3.0 Reliable Messaging.msi

Download the associated template code .

目錄

簡介
WS-RM 規格
直接與已排入佇列的 RM
WseRM 的範圍和目標
什麼是 WseRM 安裝
WseRM 程式設計模型概念
程式設計的一種體驗
RM 實作
系統管理
結論


WS-RM regulation
directs the range and objective of RM
WseRM in the queue
what is WseRM to install
WseRM program design model concept
program design >br RM practicalizes br'

傳送的訊息可能永遠不會送達、太晚、多次送達,或依序送達。 訊息送達之後,服務可能會當機並遺失一些訊息。

The message may never arrive, be too late, be delivered several times, or be delivered in an orderly manner. When the message is delivered, the service may be sent on time and some information may be lost.

例如,在購買者和賣方服務之間的交談中,購買者服務可能會傳送訊息來購買並等候運送資訊。 如果此購買訊息永遠不會送達,或在履行前由賣方遺失,則購買將不會進行。 另一方面,如果此購買訊息送達兩次,可能會導致重複購買。

For example, in conversations between buyers and sellers of services, buyers’ services may send messages to buy and wait for information to be shipped. If this purchase is never delivered, or if it is lost by the seller before performance, the purchase will not take place.

另一個範例是,假設購買要求包含第一個訊息,其中包含專案類別目錄編號的清單,後面接著每個專案的訊息,其詳細資料 (例如色彩、數量、大小) 。 如果第一個訊息未先送達,後續訊息就不合理。 或者,如果後續訊息順序不足,則詳細描述可能會套用至第一個訊息中的錯誤類別目錄編號。

Another example is provided if the purchase request contains the first message, which contains a list of project-specific directory numbers, followed by details of each project (e. g. colour, number, size). If the first message is not delivered first, the subsequent message is unreasonable. Or, if the subsequent message is not sequenced enough, the detailed description may be applied to the error-type directory number in one message.

這類問題可能比較難以處理,因為用戶端是 Web 服務,而不是人類。

It may be difficult to deal with these types of problems because the client is Web Services, not Humans.

應用程式程式碼可以使用額外的程式碼來處理這些失敗,有時需要使用增強的訊息交換模式來合作遠端端點。 不過,這種方法可以大幅增加應用程式的投資,以及其上市時間。 它也可以讓應用程式更困難且耗時,以在未來適應其變更的需求。

The application code can handle these failures using additional code, sometimes using enhanced message exchange modes to work with remote endpoints. However, it can significantly increase the investment in applications and their time to market.

或者,可靠的傳訊 (RM) 可作為整體應用程式失敗復原的一部分,以改善應用程式程式設計人員的生產力和上市時間。

Alternatively, a reliable message (RM) can be used as part of the failure to restore the whole application to improve the productivity and marketing time of the application's design staff.

本節提供 WS-Reliable傳訊規格 () https://msdn.microsoft.com/library/en-us/dnglobspec/html/WS-ReliableMessaging.pdf 摘要。

This section provides the WS-Reliable communication system () () .

若要提供可靠的傳訊,訊息必須排入佇列,原因如下:

To provide a reliable message, the message must be queued for the following reasons:

  • 針對輸出訊息,可能需要重試透過網路傳輸。
  • 針對輸入訊息,可能需要重試其傳遞至應用程式,而且其行程順序可能與抵達順序不同。

下圖說明使用共用佇列的兩個服務。

The following graph describes the two services that are used in the common queue.

若要將訊息從應用程式 A 傳送至應用程式 B,A 會將共用佇列服務中的訊息排入佇列,並將訊息從共用佇列服務取消佇列。

To send messages from application A to application B, A puts messages from shared Queue service into queues and removes messages from shared Queue service.

此圖表也會說明使用私人佇列的兩個服務。 若要將訊息從應用程式 A 傳送至應用程式 B,A 會將訊息加入其私人佇列,以將訊息傳送至 B 的私人佇列,而 B 會將訊息從其私人佇列取消佇列。 在此情況下,服務的私人佇列會像其辦公室方塊一樣運作。 其公用位址是私人佇列。

This chart will also indicate two services using a private list. To send messages from application A to application B, A will add messages to its private list to send messages to B, and B will remove messages from its private list. In this case, the private list of services will operate like its office blocks.

共用佇列方法需要通訊端點同意特定佇列服務,以及排入佇列/取消佇列通訊協定。 沒有用於排入佇列/清除佇列的標準通訊協定,因此共用佇列方法不支援互通性。

The common queue approach requires a communication peer to agree to a specific queue service, as well as to enter the queue/cancellation protocol. There is no standard message protocol used to enter the queue/remove the queue, so the common queue does not support interoperability.

私人佇列方法需要通訊端點只同意傳輸通訊協定,因此更鬆散結合且更適合 Web 服務。 WS-Reliable傳訊 (WS-RM) 規格提供標準傳輸通訊協定,因此私人佇列方法支援互通性。

The private channel requires a communication peer to agree only to the transmission protocol, so it is more loosely integrated and more suitable for the Web service. The WS-Reliable (WS-RM) protocol provides a standard transmission protocol, and thus the private list approach supports interoperability.

下圖說明 WS-RM 規格中使用的基本模型和術語。 它會描述從來源到目的地的單向序列。

The following graph describes the basic models and techniques used in the WS-RM scheme. It describes the one-way sequence from source to destination.

典型的流程如下:

The typical processes are as follows:

  1. 應用程式來源會要求使用 CreateSequence 訊息建立序列。 如果應用程式目的地接受,它會傳送 CreateSequenceResponse。 這會建立序列的序列識別碼。
  2. 應用程式來源 會傳送 一或多個含有序列識別碼的 RM 標頭的訊息。 這會將每個訊息放在 RM 來源的輸出佇列中。 Send 是本機事件,而不是分散式事件。 序列中的最後一則訊息會標示 RM 標頭中的 LastMessage 元素。 這可以是應用程式 Soap Action) 的應用程式訊息 (,或是搭配 wsrm:LastMessage Action) 的基礎結構訊息 (。
  3. 訊息在輸出佇列中之後,RM 來源會透過網路 將它傳輸 至 RM 目的地。 在序列中,傳輸可能會與傳送重迭。
  4. RM 目的地 會將訊息接收 到其輸入佇列中。
  5. RM 目的地 會認可 () 該序列中收到的訊息。 ack 表示傳輸,而不是傳遞至應用程式。 Ack 是序列特定的,而不是訊息特定。 Ack 不可靠。 如果來源未收到包含可靠訊息的堆疊,最終會重新傳輸訊息。 傳送堆疊的時機沒有設定原則。 例如,您可以在每個輸入訊息送達時、定期、最後一則訊息送達時,或 AckRequested 訊息送達時完成。 稍後會傳送ack,可能需要較少的ack 訊息。 傳送越快的堆疊,必須處理較少的重新傳輸。
  6. RM 目的地 會將訊息傳遞 至應用程式目的地。 傳遞是本機事件,而不是分散式事件。
  7. 當 RM 來源取得完整序列的堆疊時,它會傳送 TerminateSequence 訊息。 此訊息不可靠。 如果目的地未收到,它可以以完整範圍重新傳送堆疊。

WseRM 範例和支援檔會使用這些 WS-RM 規格條款。

WS-RM examples and support files will use these WS-RM specifications.

WS-RM 規格支援 CreateSequence/ CreateSequenceResponse 要求-回應訊息組,以允許服務起始下列任一項:

WS-RM rules support CreateSequience/CreateSequienceResponse request-response group to allow the service to start with any of the following:

  • 單向輸出序列。
  • 雙工序列,這是一對單向輸出和單向輸入序列。

透過單一要求-回應交換建立雙工序列,可讓端點輕鬆地將兩個單向序列相互關聯,以便將它們呈現給應用程式作為單一雙工序列。

The creation of a two-man sequence through a single-response exchange allows the peer to easily connect the two one-way sequences so that they can be presented as one-to-two-man sequences of the current application.

WS-RM 規格不支援服務起始僅限輸入序列。 服務只能起始輸出序列或一對輸入和輸出序列。 這反映在 WseRM 程式設計中。

The WS-RM rule does not support service start-up only to enter sequences. The service can only start output sequences or a pair of input and output sequences. This is reflected in the WSRM program design.

單向序列 (輸入或輸出) 是一組已排序的訊息,其中排序是由寄件者決定。 根據目的地,決定應用程式是否需要依序傳遞訊息。

A one-way sequence (in or out) is a sequence of messages that is sorted by the sender. Depending on the destination, it is decided whether the application needs to transmit the message sequentially.

每個單向序列都有在 CreateSequence/ CreateSequenceResponse 交換期間建立的唯一識別碼。 目的地一律會決定此識別碼。 此順序識別碼位於 RM 標頭中的每個應用程式可靠訊息中,而且位於每個 RM 基礎結構訊息 (,例如,ack、terminate、faults) 。

Each one-way sequence has the only identifier created during the CreateSequience/CreateSequienceResponse exchange. The destination will always decide on the identification code. This order identification code is in every application in the RM header and is in every RM base structure message (e. g., ack, termite, faults).

安全性是透過安全對話來完成的,此交談會信封 RM 序列。

Security is done through a security conversation that will encrypt the RM sequence.

即將推出的產品名稱 「Indigo」 和 WseRM 都有 2 種使用 RM 的模式:

The product names "Indigo" and WseRM, which are about to be launched, have two modes of using RM:

  • 當互動需要兩個端點的緊密互動,例如兩方之間的電話交談時,就會使用直接 RM。 每個端點都需要有另一個端點才能啟動、可連線且有回應。
  • 當互動鬆散時,會使用佇列 RM,並任意延遲,例如電子郵件。 當傳送或接收訊息時,端點不需要彼此啟動、可連線或回應。

使用 WseRM 時,直接和佇列 RM 的 API 物件模型相同。 不過,直接和佇列 RM 支援以不同的方式處理整體復原的不同應用程式案例,因此整體程式設計模型基本上不同。

When using WseRM, the API object model is the same as the API object that queues the RM. However, the direct and RM support different applications for whole restoration in different ways, so the whole design model is basically different.

WseRM 支援直接 RM 和佇列 RM。 下圖說明直接和佇列 RM 的特性。

WseRM supports direct RMs and RMs. The following graph describes the properties of direct RMs and RMs.

直接 RM 支援兩個端點之間的交談,這些端點假設彼此有密切且專用的互動。 遠端服務必須能夠連線、啟動和回應,才能進行向前進度,就像電話交談一樣。

Direct RM supports conversations between two endpoints that assume close and dedicated interaction. Remote services must be connected, activated, and responded to in order to move forward, as in phone conversations.

與分散式應用程式相關的服務會向前進行,並以同步分散式狀態的單位復原。 除非採取特定動作,否則直接 RM 會話無法持續發生服務失敗。 發生系統失敗時,服務可以透過下列其中一項來復原:

The service associated with the decentralized application will move forward and be restored in units that synchronize the decentralized status. Unless a specific action is taken, the direct RM session will not be able to continue the service failure. In case of system failure, the service can be restored through one of the following:

  • 服務可以使用應用程式特定的訊息,告知其他服務回到先前已知的點。
  • 傳送者和接收者之間的分散式交易可用來簡化應用程式程式碼以進行復原。 分散式雙階段認可會自動將所有相關服務的狀態帶回交易的開頭,其中傳送和接收的所有訊息結果都會復原。

如上圖所示,直接 RM 提供下列保證,某些傳輸通訊協定不提供:

As shown in the figure above, direct RM provides the following assurances and certain communication protocols are not provided:

  • 完全一次:這可確保每個訊息都完全傳遞一次。
  • 順序:這可確保 RM 來源應用程式傳送訊息的順序與 RM 目的地應用程式所見的順序相同。

Direct RM 具有下列優於傳輸層級通訊協定的優點:

Direct RM has the following advantages over transfer-level communication protocols:

  • 端對端:這會提供端對端而非點對點保證。 也就是說,收到認可時,傳送者知道最終接收者已收到訊息,而不只是下一個中繼 (,例如防火牆、網路路由器或負載平衡器) 。 最終接收者可以簽署認可,以證明它傳送了驗證,以確保訊息層級的安全性。
  • 連線健全性:Direct RM 提供邏輯連線給應用程式,可在基礎傳輸連線來回時存留。
  • 與傳輸無關:如同其他 SOAP 層級機制,直接 RM 提供傳輸獨立性,因此在各種傳輸之間使用相同的 API。 這可讓傳輸變更,而不需變更應用程式程式碼。

佇列 RM 支援兩個無法假設緊密互動的端點之間的交談。 遠端端點不需要連線、啟動或回應本機端點才能進行向前進度。

Bar RM supports conversations between two endpoints that cannot be assumed to interact closely. Remote end points do not need to be connected, activated, or echoed to their endpoints to move forward.

分散式應用程式通常設計成處理多個不同的遠端端點。 清單通常無法事先得知,而且其行為可能會有很大的差異。 某些遠端端點可能能夠立即回應,而其他端點可能會因為流量暴增、暫時中斷連線、緩慢的協力廠商、人為核准,甚至製造而花費較長的時間。

The list is often not known in advance, and its behaviour may vary considerably. Some remote endpoints may be able to respond immediately, while others may take a long time to approve, or even produce, as a result of a surge in traffic, a temporary break in connection, a slow-down of connections, a slow association of manufacturers, and others.

使用佇列 RM 的應用程式會使用比使用直接 RM 的應用程式較小的本機進度和復原單位。 輸入訊息的抵達只會讓訊息排入佇列,並新增至服務的 To-do 工作。 當資源可用來處理輸入訊息時,狀態轉換會使用本機交易來清除訊息、處理訊息,以及排入佇列輸出訊息,而不需要涉及遠端端點。 認可之後,RM 基礎結構會開始嘗試傳輸輸出訊息,而只需要遠端服務最終可供使用。 這些較小的本機交易步驟可提供處理遠端服務中無法預期回應所需的隔離。

Applications using RM in Queue will use a smaller local progress and restoration unit than applications using direct RM. The arrival of the input message will only cause the message to be placed in the queue and will be added to the service's To-do job. When the resource is available to process the input message, the status switch will use the home transaction to clear messages, process messages, and e-mails from the queue, without the need to involve remote endpoints. After this is done, the RM Foundation will begin to try to deliver messages, and only remote services are needed to be available. These smaller local transaction steps will provide the separations needed to handle remote services that cannot be expected to be returned.

如下圖所示,除了直接 RM 的優點之外,佇列 RM 還提供下列優點:

In addition to the advantages of the direct RM, as shown in the following graphs, the following advantages are provided by the queue RM:

  • 獨立進度:如上所述,當遠端服務無法使用時,服務可以在本機進行進度。 (向前或向後轉換) 進行狀態轉換,而不需與其他服務通訊。
  • 固定每則訊息的成本: (例如,記憶體、執行緒、資料鎖定) 等候下一個輸入訊息,可能會很危險。 相反地,分散式應用程式中的每個服務都更安全地放棄昂貴的資源, (停用) ,並在下一個輸入訊息送達 (啟用) 時重新取得資源。 磁片 I/O 更安全的固定負荷會取代隨著時間增加的額外負荷危險。
  • 從服務失敗復原:某些遠端端點可能高度可靠且可供使用 (,例如具有叢集資料庫的伺服器陣列) 。 其他人可能會定期離開服務 (,例如個人電腦或小型單一電腦伺服器) 。 佇列的 RM 會話可以持續到服務失敗,因為 RM 中繼資料 (順序資訊、訊息等) 會儲存在交易的持久存放區中,以便安全地儲存輸出訊息以供稍後傳輸和輸入訊息,以便稍後在復原後傳遞。

佇列 RM 所使用的儲存體是交易式資源管理員,因此可以排入佇列輸出訊息,並可在應用程式交易中將輸入訊息清除佇列:

The storage unit used by the queue RM is a transactional resource manager, so you can type in the queue to output messages and clear the input messages in the application transaction:

  • 由於傳送) 的排入佇列 (在交易認可之前不會實際發生,因此在認可之後才會開始傳輸,因此中止會自動「取回」交易期間應用程式傳送的訊息。
  • 由於在交易認可之前不會實際執行傳遞 () ,因此中止會將訊息保留在輸入佇列中,以便稍後在另一筆交易中重試。

WseRM 參考實作的目標是:

The objective of WseRM's reference is to:

  • 提供WS-ReliableMessaging規格的範例參考實作。
  • 若要將 RM 序列新增至應用程式的 WSE 3.0 程式設計模型。
  • 提供直接 RM 的實作。
  • 若要提供佇列 RM 的實作,利用SQL Server在伺服器陣列中提供下列專案:
    • 向外延展:新增更多節點會增加輸送量。
    • 復原:當節點失敗時,認可的資料不會遺失,且服務會保持一致狀態。
    • 可用性:當節點失敗但輸送量降低時,服務的每個層面都會維持運作。
  • 若要提供 WseRM Visual Studio 2005 解決方案與原始程式碼,以便您可以修改 WseRM 實作以符合您自己的應用程式需求。
  • 若要使用 WseRM 提供範例,以說明程式設計模型和範例使用案例。
  • 使用其他 WS 規格和 WSE 3.0 功能自然撰寫,例如安全性和交易。
  • 提供上述檔。

WseRM 的非目標如下:

WseRM's non-targets are as follows:

  • WseRM 不是支援的產品,且測試有限。 WseRM 是範例參考實作,不保證作業效率或正確實作。 其主要目的是讓您能夠建置範例應用程式,讓您能夠瞭解如何套用 WS-RM。 WS-RM 的完全支援實作將在發行的 Indigo 版本中提供。
  • 雖然伺服器陣列中的向外延展是目標,但因為開發資源有限,所以不會有效率。 有些目標效率措施是在開發時間最少的情況下進行。
  • 尚未完成效能或壓力測試。
  • 尚未測試與 Indigo 的互通性。
  • 提供 UI 工具來管理和監視已排入佇列的 RM。 相反地,系統會提供已排入佇列的 RM 架構,以允許任何資料庫應用程式管理和監視已排入佇列的 RM。 這更具彈性,而且需要較少的開發資源。 提供一些管理預存程式。

本節詳細說明與本文相關聯的 WseRM 安裝內容。

This section details the WseRM installation content associated with this article.

WseRM 會安裝到下列目錄:

WseRM will install the following folders:

...\Program Files\Microsoft WSE\v3.0\Samples\CS\RM

子目錄包含下列專案:

Subdirectories contain the following projects:

  • \runtime 目錄:RM 基礎結構原始程式碼可做為 Visual Studio 解決方案使用。 目錄結構和 CLR 命名空間為:
    • WseRM:程式設計模型介面和類別。
    • WseRM.Common:這些類別提供 RM 如何插入 WSE (,例如傳訊、原則和管線) 。
    • WseRM.Queued:已排入佇列的 RM 實作。
    • WseRM.Direct:直接 RM 實作。
    • WseRM.WireFormat:包裝連線格式的類別。
    • \GenerateDB.sql:用於在應用程式資料庫內建立資料庫資料表、索引和預存程式的 Transact SQL 腳本。
  • \docs 目錄:
    • WseRMOverview.doc:WseRM 概念和實作的描述 (與本文) 相同。
    • WseRMProgramming:如何使用 WseRM 進行程式設計的描述。
    • WseRMSamples.doc:WseRM 範例的描述,以及如何安裝、編譯和執行它們。
    • WseRMDesign:WseRM 設計的描述。
    • \reference:參考檔。 這些是從執行時間 Visual Studio 解決方案中的檔編譯,其使用標準 C# /// 格式。 若要檢視檔,請按兩下 \reference\Documentation.chm。
  • \samples:WseRM 範例。 每個範例都是 Visual Studio 解決方案,每個服務都是 Visual Studio 專案。 目錄結構是以 WSE Web 服務程式設計模型為基礎:
    • \ASMX 目錄:
         PingDirectTcp
         PingDirectHttp
    • \SoapService 目錄:
         PingDirectTcp
         MultiPingDirectTcp
         PingQueuedTcp
         EchoDirectTcp
         EchoQueuedTcp
         PurchaseQueuedTcp
         PictureQueuedTcp
    • \SoapReceiver 目錄:
         EchoDirectTcp

本節說明使用 WseRM 時的程式設計模型概念。 下圖說明 WseRM 所涉及的概念及其之間的關聯性。

This section describes the concept of a program design model when using WseRM. The following graph describes the concepts involved in WseRM and the connection between them.

服務通常有幾個端點,每種類型的遠端服務通訊各有一個端點。 每個端點通常都有與其相關聯的 WSDL 和 WSE 原則,以描述遠端服務如何與其通訊。 例如,賣方服務可能會有一個當地端點供購買者使用,另一個則用於貨運公司。 WseRM 會擴充 WSE 3.0 原則基礎結構,讓您能夠在 WSE 3.0 原則檔案中提供及設定 RM 支援。

The service usually has several endpoints, and each type of remote service communication has one end point. Each endpoint usually has WSDL and WSE principles associated with it to describe how remote services communicate with them. For example, a vendor service may have one local end for buyers and the other for shipping companies. WSRM will expand the WSE 3.0 principle structure to enable you to provide and configure RM support in the WSE 3.0 principle file.

服務通常有許多服務實例,每個實例都會保留服務提供之特定實例的狀態。 例如,賣方服務可能會有每個購買的狀態,包括具有購買者服務的序列,以及具有貨運服務的序列。

There are often many examples of service delivery, and each example retains a specific state of service delivery. For example, a seller’s service may have a status of every purchase, including a sequence of buyer’s services, and a sequence of cargo services.

WseRM 單向序列對應至 WS-RM 序列。

The WseRM single-sequence corresponds to the WS-RM sequence.

服務可以有多個:

The service can be multiple:

  • 輸入序列:單向輸入排序的訊息集。
  • 輸出序列:單向輸出排序的訊息集。
  • 雙工序列:一對輸入和輸出序列。

服務可以起始:

The service can start:

  • 輸出序列。
  • 雙工序列。

每個序列都有在本機建立時立即建立的識別碼。 針對雙工序列,雙工序列及其基礎輸入和輸出序列全都會共用相同的識別碼。 這些識別碼對已排入佇列的序列很重要,因為應用程式會使用這些識別碼來永久將序列與其應用程式產生關聯。 應用程式可以永久儲存序列識別碼,稍後再使用它來啟動序列。 此識別碼只會在本機使用。 它不會線上路上輸出。 應用程式可以建立此識別碼,或允許 RM 基礎結構產生 Guid 型識別碼。

Each sequence has an identification code that is created immediately upon the creation of the machine. The same identifiers are shared for the binary sequence, the binary sequence and its underlying input and output sequences. These identifiers are important for the sequences that are already in the queue, because the application uses these identifiers to permanently connect the sequence to its application. The application can save the serial identifier permanently and use it later to activate the sequence. It will only be used in this case. It will not be delivered online. The application can create the identification code or allow the RM base structure to generate Guid identifiers.

每個輸入和輸出序列都有一個在連線上使用的 WsrmID。 雙工序列沒有 WsrmID。 雙工序列只是一對一起建立的輸入和輸出序列,並用在雙向交談中。 屬於雙工序列一部分的輸入和輸出序列有不同的 WsrmID。 雙工序列是一種方便的方式,可維護應用程式 WS-RM 通訊協定所提供的配對原始相互關聯。

Each input and output sequence has a WsrmID used online. There is no WsrmID for the dual-manufacturing sequence. The double-work series is only a pair of input and output sequences that are created together and used in two-way conversations. There are different WsrmIDs for input and output sequences that are part of the two-manufacture sequence. The double-work series is a convenient way to maintain the matching of originals provided by the WS-RM communication protocol.

序列也可以是直接或佇列。 這些的 API 相同。 不過,其在應用程式中的使用方式與先前) 中所述 (相當不同。 其實作也相當不同。 針對已排入佇列的 RM,當輸入訊息已清除佇列 (傳送) 時,RM 基礎結構會將交易傳播至應用程式,而當輸出訊息排入佇列 (傳送) 時,應用程式會將交易傳播至 RM 基礎結構。 交易傳播是透過 Transaction.Current 隱含完成。

The sequence can also be direct or queued. These APIs are the same. However, they are used in the application in a very different way than in the previous one. They are also quite different. For RMs that are already in the queue, the RM base structure transmits the transaction to the application when the input message has been cleared (transmission), and when the output message is placed in the queue (transmission), the application transmits the transaction to the RM base structure. The transaction distribution is done via Transaction. Current's cover.

輸入序列可以選擇性地依序傳遞。 依序表示訊息會以傳送者傳送的相同順序傳遞至應用程式。 例如,如果訊息號碼 1 和 3 已抵達,但無法傳送 2,則可以傳遞訊息 1,但訊息 3 傳遞必須等候訊息 2 送達並傳遞。

Enter the sequence to be transmitted selectively. The sequence indicates that the message is transmitted to the application in the same order as that sent by the sender. For example, if the message numbers 1 and 3 have arrived but cannot be sent 2, the message 1 can be transmitted, but the message 3 must wait for the message 2 to be sent and transmitted.

序列具有設定檔,其屬性描述順序的行為。 配置檔案屬性可以在服務的原則檔中設定。 輸入和輸出序列通用的配置檔案屬性如下:

Sequence has a configuration file, with attributes describing the behaviour of the order. Configure file properties can be configured in the service's original file. Enter and output series generic configuration file properties are as follows:

  • 到期:如果此絕對時間自序列開啟後已過期,則順序狀態會設定為 Faulted。
  • ExpiresSeconds:如果此時間間隔自序列開啟後已過期,則順序狀態會設定為 Faulted。 Expires 覆寫 ExpiresSeconds。
  • 刪除:如果此絕對時間自序列開啟後已過期,則會刪除序列。
  • DeleteSeconds:如果此時間間隔自序列開啟後已過期,則會刪除序列。 刪除會覆寫 DeleteSeconds。
  • 優先順序:序列的處理優先順序。 這會用來決定要先傳遞和傳輸的訊息。
  • MaxFaultHandlerAttempts:如果錯誤已在應用程式錯誤處理常式上推送多次,則不會再次推送。

輸入序列唯一的配置檔案屬性如下:

Enter the only configuration file properties for the sequence as follows:

  • InOrder:訊息是否應該以傳送的相同順序傳遞。
  • AutomaticallyAck:當每個輸入訊息送達時,訊息是否應該由個別的訊息自動加以認可。 若未這樣做,目的地應用程式程式碼必須呼叫 API 以指示要傳送的通知,這可降低大量認可訊息,而代價是更複雜的應用程式程式碼。
  • MaxDeliverAttempts:如果訊息傳遞已中止這多次,就不會再進行傳遞嘗試,且順序會處於 Faulted 狀態,且錯誤原因為 PoisonMessage。

輸出序列唯一的配置檔案屬性如下:

The only configuration file properties for the output sequence are as follows:

  • RetransmissionIntervalSeconds:如果重新傳輸等候時間已過期,因為訊息傳輸嘗試沒有認可,則應該重新傳輸訊息。
  • RetransmissionExponentialBackoff:是否應該針對訊息重新傳輸使用指數輪詢,讓每個連續傳輸嘗試只要前一次傳輸嘗試等候兩次。
  • MessageExpiresIntervalSeconds:如果在傳送訊息之後已超過此間隔,則傳輸嘗試應該停止,且順序應處於 Faulted 狀態。
  • MaxTransmitAttempts:在此數目的傳輸嘗試之後,將不會再嘗試任何動作。
  • AutomaticallySendTerminateSequence:當完整序列範圍已遭攔截時,是否應該立即自動傳送 TerminateSequence 訊息。
  • CreateSequenceTimeoutSeconds:傳送 CreateSequence 時,這是在放棄之前等待 CreateSequenceResponse 的時間量。
  • AddAckRequestedHeaderToMessages:True 表示應該將 AckRequested 標頭新增至每個可靠的訊息。

雙工序列沒有自己的設定檔。 相反地,其輸入和輸出序列各有一個設定檔。

The binary sequence does not have its own configuration file. On the contrary, each input and output sequence has a configuration file.

建立序列之後,配置檔案屬性是不可變的。

When you create a sequence, the configuration of file properties is immutable.

序列群組是一組一起使用的序列。 例如,採用支援購買的賣方服務。 每個個別購買都有一個雙工順序,並具有購買者,以及一個具有貨運者的雙工順序。 下列輸入訊息觸發程式適用于賣方服務:

Sequence groups are a set of sequences that are used together. For example, the following input triggers are suitable for vendor services:

  • 來自購買者的訊息抵達會導致序列和訊息傳遞至服務應用程式程式碼。 若要處理此訊息,服務可能需要將訊息傳送給購買者和貨運公司。
  • 來自貨運公司之訊息的抵達會導致將序列和訊息傳遞至服務應用程式程式碼。 若要處理此訊息,服務可能需要將訊息傳送給購買者和貨運公司。

序列群組的其中一個用途是使用較大的資料細微性來鎖定來防止死結,有效地將群組中的所有序列鎖定在一起。 讓我們使用上述範例來說明:

One of the uses of the sequence group is to use greater data detail to prevent death by effectively locking together all sequences in the group. Let us use the examples above:

  • 沒有序列群組:處理購買者輸入訊息的執行緒會鎖定購買者序列,並嘗試鎖定貨運公司順序。 處理賣方輸入訊息的執行緒會鎖定賣方序列,並嘗試鎖定購買者序列。 如果兩個輸入訊息有可惜的時間,就會發生死結。
  • 使用序列群組:當兩個輸入訊息的其中一個送達時,這兩個執行緒會嘗試取得單一序列群組鎖定。 一個將會獲勝並完成處理。 然後,另一個會取得單一鎖定並完成處理。 當只有單一獨佔鎖定時,就無法發生死結。

順序群組的第二個用途是減少應用程式必須維護的對應數目。 應用程式可以將順序群組識別碼設定為服務實例識別碼 (例如,購買識別碼) 是服務實例狀態的主鍵。 當訊息及其順序傳遞至應用程式時,群組識別碼可從序列取得,因此應用程式會立即具有服務實例識別碼。 如果沒有群組識別碼,應用程式必須維護序列識別碼與服務實例識別碼的對應。

The second purpose of the sequence group is to reduce the number of applications that the application must maintain. The application can set the sequence group identification as the service's actual case identification (e.g. purchase of the code) as the main key to the service's actual status. When messages and their serial transmission to the application are obtained from the sequence, the application immediately has the service's actual case identification. If there is no group identification, the application must maintain the sequence and the service's actual case identification.

序列群組的第三個用途適用于佇列序列。 它允許開放式啟用可與單一資料庫存取搭配使用的所有序列。 WseRM 中尚未實作此優化。

The third use of a sequence group is suitable for choreography. It allows open access to all sequences that can be used in combination with a single data repository. This is not yet done in WseRM.

序列群組只是識別碼。 唯一涉及的物件是字串。 它是名為 GroupID 序列的屬性。

Sequence groups are just identifiers. The only object involved is a string. It is the property of the GroupID sequence.

群組識別碼通常會識別服務實例 (例如,特定的購買識別碼) ,這可能是服務實例狀態的資料庫金鑰。 這可讓應用程式從目前的輸入序列移至相關的服務實例狀態。 這在WseRMProgramming.doc中詳細說明。

Group identifiers usually identify service actuals (e.g., specific purchase identifiers), which may be the database key for the service actual status. This allows applications to move from the current input sequence to the service actual status. This is detailed in WseRMProgramming.doc.

順序管理員是 WseRM 程式設計模型的核心。 它們可讓您建立和管理 RM 序列。 序列管理員可以設定為單向 (輸入或輸出) 或雙工 (輸入和輸出) 。 順序管理員是用戶端所建立之序列的處理站。 單向序列管理員會使用相同的本機端點來管理所有序列:

The sequence manager is the core of the WseRM program design model. They allow you to create and manage the RM sequences. The sequence manager can set them as one-way (in or out) or double-entry (in and out). The sequence manager is the processing station for the sequence created by the client. A single-to-sequence manager will manage all sequences using the same home-office peer:

  • 輸入順序管理員的本機端點通常會發佈,讓遠端服務可以起始序列。
  • 輸出順序管理員的本機端點用於 WS-RM 堆疊和錯誤訊息。 它會在 CreateSequence/Response 交換期間提供給遠端端點。

每個順序管理員都有識別碼。 應用程式會使用這些識別碼,在執行時間取得順序管理員。

Each order manager has an identification code. The application uses these identifiers to get the order manager at the time of the execution.

序列只有一個序列管理員。 順序管理員的類型類別與序列相同。 有輸入、輸出和雙工順序管理員。 有直接和已排入佇列的序列管理員。 下圖說明雙工與輸入與輸出序列和順序管理員之間的關聯性。

There is only one sequence manager. The order manager's type is the same as the sequence. There are input, output and binary process managers. There are sequence managers who are directly and in the queue. The following graph describes the connection between the two jobs and the input and output sequence and order manager.

  • 雙工順序管理員有 1 個輸入順序管理員和 1 個輸出順序管理員。
  • 雙工序列有 1 個輸入序列和 1 個輸出序列。
  • Xxx 序列管理員有多個 Xxx 序列, (Xxx 為 Input、Output 或 Duplex) 。

圖表中未顯示的其他條件約束如下:

Other terms and conditions not shown in the chart are as follows:

  • 雙工順序管理員及其輸入和輸出順序管理員共用相同的管理員識別碼。
  • 雙工序列及其輸入和輸出序列會共用相同的序列識別碼。
  • 雙工順序管理員及其輸入和輸出順序管理員來自相同的實作 (例如,直接與已排入佇列的) 。
  • 序列管理員和其管理的序列來自相同的實作 (例如,直接與已排入佇列的) 。
  • 因為序列群組是一組一起使用的所有序列,所以自然條件約束是雙工序列及其輸入和輸出序列全都會共用相同的序列群組。 當然,相同的群組也可以包含其他序列。
  • 序列群組可以包含來自不同實作的序列。 不過,當序列群組混合不同的實作時,順序群組的目標 (即死結防護和開放式快取) 遭到入侵。 直接和佇列的 WseRM 實作會跨這兩個實作進行死結防護。

序列管理員會接聽連線以取得抵達其端點的訊息:

The Sequence Manager will listen to the connection to get a message to his peer:

  • 針對輸入順序管理員,抵達其端點的 CreateSequence 訊息會導致它建立新的輸入序列。 針對雙工順序管理員,抵達其輸入序列端點的 CreateSequence 訊息會導致它建立新的雙工序列。 如果要求訊息要求 (輸入與雙工) 不符合目標端點的序列管理員, (輸入與雙工) ,就會拒絕建立要求。
  • 對於抵達輸入序列管理員端點的可靠訊息,序列管理員知道訊息所屬的序列,其 WS-RM 序列標頭的 Identifier 元素。
  • 例如,對於 RM 基礎結構訊息 (,SequenceAcknowledgement、TerminateSequence、sequence Fault) 抵達序列管理員的端點,序列管理員知道訊息由適當的 WS-RM 標頭的 Identifier 元素所屬的序列。

每當未提供序列特定設定檔時,順序管理員就會使用預設序列設定檔。 在建立之前,應用程式可以選擇性地提供序列特定設定檔,以覆寫原則檔案中的管理員層級設定檔設定。

Each time a sequence-specific profile file is not provided, the sequence manager uses the default sequence profile. Before being created, the application can selectively provide the sequence-specific profile to overwrite the administrative level profile in the original file.

為了讓您瞭解 WseRM 程式設計模型,本節提供一些使用 WseRM 之簡單單向佇列序列的範例程式碼。

In order to make you understand the design model of the WseRM program, this section provides some examples of simple single-direction sequences using WseRM.

在此範例中,用戶端會建立單向輸出序列、傳送 3 則訊息,並關閉序列。 順序管理員定義于 WSE 原則檔中的 WseRM 判斷提示中:

In this example, the client will create a single output sequence, send 3 messages and shut down the sequence. The order manager defines WSRM in the WSE principle file as:


只有一個輸出順序管理員。 DatabaseConnectionString 指出它是佇列序列管理員,它會將其 RM 中繼資料儲存在名為 「RMClientDB」 的資料庫中。 本機端點位址是用戶端接收認可和遠端產生序列錯誤的位置。

Only one output order manager. DatabaseConning String states that it is the Queue Sequence Manager and that it will store its RM metadata in a database called "RMClieentDB ". The client peer address is the location where the acceptance and remote generation sequence errors are made by the client.

用戶端必須使用與原則檔案中原則名稱相同的原則屬性,將 Proxy 類別系結至原則:

The client must use the same principle attribute as the principle name in the principle file, linking the Proxy class to the principle:


Proxy 類別會產生為部分類別,這可讓您以重新產生 Proxy 時不會遺失的方式來新增此屬性。

The Proxy class produces a partial category, which allows you to add this attribute in a way that cannot be lost when Proxy is regenerated.

用戶端會執行下列動作:

The client executes the following actions:


用戶端會使用原則檔中的序列管理員名稱,從靜態集合 OutputSequenceManagers 取得序列管理員。 當 WseRM 原則判斷提示程式碼剖析原則判斷提示時,就會填入此集合。 用戶端會使用管理員來建立伺服器的輸出順序。 然後它會建立 Proxy,並使用 SetProxy 方法將它系結至序列。 然後,它會傳送 3 則訊息並關閉序列。 這全都是使用 .NET Framework System.Transactions 程式設計模型在單一交易中完成。 在交易認可之前,訊息不會在輸出佇列中。 認可之後,RM 來源就可以開始傳輸訊息。

The client will use the serial manager name in the original file to collect the sequence manager from the static OutputSequienceManagers. It will fill in this collection when the Wserm is used to interpret the program code for analysis. The client will use the manager to create the server's output order. It will then create Proxy and bind it to the sequence using the SetProxy method. It will then send 3 messages and shut down sequences. All of this is done using the.NET Framewerk System. Transactions programming model in a single transaction. The message will not be in the output column until the transaction is recognized.

伺服器在描述輸入順序管理員的原則檔案中具有單一原則:

The server has a single rule in the principle file describing input order manager:


伺服器輸入管理員必須有可定址的端點。

The server input manager must have an addressable peer.

伺服器是具有 WebMethod 的 WebService,可處理來自所有用戶端的輸入訊息:

The server is WebService with WebMethod, which handles input messages from all client:


此類別會使用原則屬性與原則檔案中原則名稱相同的原則名稱系結至原則。 呼叫此方法時已經在交易範圍內,也就是清除訊息佇列的相同交易。 如果交易中止,不僅會復原任何應用程式狀態變更,也會在輸入佇列上回複訊息,稍後再試一次,可能是由另一個伺服器陣列節點嘗試。 FooHandler 方法也可以從執行緒靜態 InputSequence.Current 屬性取得輸入序列,這適用于檢查序列狀態之類的專案。

This type of transaction uses the same name as the original attribute in the original file. This method is already in the range of transactions, i.e., the same transaction that clears the message line. If the transaction is suspended, not only will it restore any application changes in status, it will also repeat the message on the input queue and try again at a later stage, perhaps by another server arraying nodes. The FooHandler method can also get input sequences from the active InputSeuence.Current attribute, which is suitable for a project like the one used to check the status of the sequence.

參考實作提供呼叫 RM 存放區介面的泛型序列和時序管理員類別。 這些類別包含所有 WSE 傳訊黏附。 RM 存放區介面的高階足以允許包含儲存體特定演算法,以允許儲存體特定的效能優化。

Reference is made to the generic sequence and time-series manager categories that provide a call RM repository interface. These categories contain all WSE messages sticky. The RM repository interface is sufficiently high to include a storage-specific algorithm to allow a storage-specific function to be optimized.

WseRM 中提供一個直接 RM 實作和一個佇列 RM 實作。 它們分別在 RM 存放區實作中使用雜湊表和SQL Server。

WseRM provides a direct RM implementation and a queue RM implementation. They distinguish between the use of miscellaneous watches and SQL Server in the RM storage area.

WseRM 安裝中的下列檔提供更多詳細資料:

More detailed information is available for the following files in WseRM installation:

...\samples\CS\RM\docs\WseRMImplementation.doc

佇列 RM 實作的目標是不需要引進額外的佇列伺服器或資料庫,以簡化系統管理。 相反地,可以將 WseRM 佇列資料表和預存程式新增至應用程式現有的資料庫。

The goal of the queue RM is to simplify system management without the introduction of additional RM servers or databases. Instead, we can add WSRM files and savers to the existing database of the application.

包含 RM 資料表的資料庫是由應用程式服務管理員所擁有。 為了協助系統管理,RM 資料表的架構會發佈在下列檔中:

The database containing the RM data sheet is owned by the application service manager. To assist in system management, the RM datasheet architecture is published in the following files:

...\samples\CS\RM\docs\WseRMImplementation.doc

和 腳本檔案:

and Script file:

...\samples\CS\RM\runtime\GenerateDB.sql

這可讓撰寫無限制的各種查詢來進行管理和分析。 提供預存程式來強制執行到期和刪除時間,可從SQL Server Agent定期呼叫。

This allows the writing of unlimited queries to be managed and analysed. Provides a default program to enforce expiration and deletion times, which can be called regularly from SQL Server Agent.

本文僅提供 WSE 3.0 WS-ReliableMessaging實作的概觀。 後續步驟是逐步解說 RM 範例,並使用 WseRM 來瞭解 WS-RM 如何在應用程式中提供可靠的傳遞。 若要開始,請安裝 WseRM,並在 docs 目錄中查看WseRMSamples.doc檔。

This document provides only an overview of what WSE 3.0 WS-ReliableMessaging does. The follow-up step is a gradual interpretation of the RM example and the use of WSRM to understand how WS-RM can provide reliable transmission in applications. To start, install WSRM and view the WSRMSamples.doc files in the docs directory.

歡迎使用意見反應,並可傳送至 wsefeed@microsoft.com 。 謝謝。

Welcome to comment and send it to .

美化布局示例

欧易(OKX)最新版本

【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   全球官网 大陆官网

币安(Binance)最新版本

币安交易所app【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

火币HTX最新版本

火币老牌交易所【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址
文字格式和图片示例

注册有任何问题请添加 微信:MVIP619 拉你进入群

弹窗与图片大小一致 文章转载注明

分享:

扫一扫在手机阅读、分享本文

发表评论
平台列表
美化布局示例

欧易(OKX)

  全球官网 大陆官网

币安(Binance)

  官网

火币(HTX)

  官网

Gate.io

  官网

Bitget

  官网

deepcoin

  官网
热门文章
  • 0.00006694个比特币等于多少人民币/美金

    0.00006694个比特币等于多少人民币/美金
    0.00006694比特币等于多少人民币?根据比特币对人民币的最新汇率,0.00006694比特币等于4.53424784美元/32.5436 16人民币。比特币(BTC)美元(USDT)人民币(CNY)0.000066944.53424784【比特币密码】32.82795436 16比特币对人民币的最新汇率为:490408.64 CNY(1比特币=490408.64人民币)(1美元=7.24人民币)(0.00006694USDT=0.0004846456 CNY)汇率更新时...
  • 0.00003374个比特币等于多少人民币/美金

    0.00003374个比特币等于多少人民币/美金
    0.00003374比特币等于多少人民币?根据比特币对人民币的最新汇率,0.00003374比特币等于2.2826 1222美元/16.5261124728人民币。比特币(BTC)美元(USDT)人民币(CNY)0.00003374克洛克-0/22216.5261124728比特币对人民币的最新汇率为:489807.72 CNY(1比特币=489807.72人民币)(1美元=7.24人民币)(0.00003374USDT=0.0002442776 CNY)。汇率更新于2024...
  • 1983年,山西老人致信央行:人民币上的“中国人民银行”是我写的

    1983年,山西老人致信央行:人民币上的“中国人民银行”是我写的
    阅读本文前,请点击红色“关注”按钮,方便大家讨论和分享,给您带来不一样的参与感。谢谢大家的支持!1983年,山西日报发表了一篇异常简短的文章,主要内容是:“人民币的字体作者是纪。“不久后,上海《新民晚报》也发表了一篇报道,主要内容与《山西日报》基本相同。二人转文章的排版只占一小部分,但不妨碍大家关注此事。一位家住山西的老人看完文章后显得有些不解:“不是啊,人民币上的字明明是我写的。我怎么能把它戴在别人头上呢?”本着尊重历史的原则,老人的女儿给报社写了两封“澄清信”,分别寄给了...
  • 1929经济大萧条或许即将重演?

    1929经济大萧条或许即将重演?
    人类似乎陷入了一个历史悖论,即我们总是重复同样的错误,无法真正从过去的错误中吸取教训。近年来,我们对世界各地接连不断的挑战和危机深感不安。20 19年突如其来的疫情,乌克兰的战火硝烟,欧洲的天然气供应危机以及全球少数国家的饥荒,所有这些问题都像洪水一样,一个接一个地涌来。如果你今天感到心情沉重,不要失去希望,因为明天可能会带来更严峻的挑战。首先,让我们深入讨论名为1929大萧条的时期。这场大萧条实际上是指从1929到1933的一场影响深远的经济危机。这场危机首先起源于美国,然...
  • 2000年美国GDP占世界的304%,中国GDP仅占35%,现在呢?

    2000年美国GDP占世界的304%,中国GDP仅占35%,现在呢?
    GDP作为全球公认的实力基准,就像是一个大国实力的代言人,它是布雷顿森林体系下全球团结的声音。它不仅仅是数字的累积,更是大国综合实力的人格化,默默诉说着每个国家的辉煌与荣耀。虽然GDP不是衡量一个国家综合实力的唯一标准,但无疑是最关键的指标之一。作为一面镜子,它反映了国家的经济实力和发展水平,是国家综合实力的重要体现,不容忽视。2000年,中国GDP迈过/克洛克-0/万亿美元的重要门槛,达到/克洛克-0/。2/克洛克-0/万亿美元(折合人民币7。7万亿元)。然而,在全球经济的...
标签列表