共用方式為


將對象當做參數傳遞

COM+ 佇列元件服務不會針對每個現有的 COM 元件啟用佇列。 關於可以排入佇列的方法類型,存在限制。 由於傳訊條件約束,方法必須遵循下列規則:

  • 它們必須只包含輸入參數。
  • 它們不得傳回任何應用程式特定的結果。

此外,還有可傳遞至佇列元件之輸入參數類型的限制。 在運行時間,佇列元件服務會封裝用戶端上的自變數,並使用 消息佇列將它們傳遞至伺服器元件。 簡單型別,例如整數和布爾值,可以輕易地封送處理—如果沒有協助,就無法封送處理更複雜的類型。

在透過佇列元件的方法呼叫將物件作為參數傳遞的情況下,用戶端會將物件傳遞給錄製器。 記錄器會將物件封裝為消息佇列訊息,並將其傳遞給監聽程式。 接聽程式接收到訊息後傳給播放器,播放器必須重新實例化該物件,才能將其傳遞到用戶端指定的方法呼叫。 根據佇列環境中用戶端和伺服器的存留時間,其含義為這些物件必須能夠通過值傳遞進行處理。 因為 COM+ 不提供標準 COM 物件的傳值語意,因此錄製器和播放器需要元件的協助以完成物件的封送處理和取消封送。

支援 IPersistStream 的物件參考可用來做為佇列元件上方法呼叫的參數。 物件無法假設將何時被重新實例化。 例如,伺服器可能無法使用,或伺服器元件可能直到當天晚些時候才啟動。 不支援 IPersistStream 的物件會傳回錯誤。

Visual Basic 可持久化的物件

Microsoft Visual Basic 6 允許建立可保存的物件。 這些物件支援 IPersistStream,而且可以當做參數傳遞至佇列元件方法呼叫。 必須先初始化可保存的物件,才能將Visual Basic對象傳遞至佇列元件。 這可以透過下列兩種方式之一來完成:

  • 如果建立可保存物件的應用程式是以 Visual Basic 撰寫,則 Visual Basic 執行時間會自動處理物件初始化。
  • 如果建立 Visual Basic 可保存物件的應用程式是以 Visual Basic 以外的語言撰寫,例如 Microsoft Visual C++,則應用程式必須查詢可保存物件的 IPersistStream 介面或呼叫 IPersistStreamInit::InitNewIPersistStream::載入 方法。

ADO 記錄集和 OLE DB 資料列集

在元件之間傳遞 ADO Recordset 或 OLE DB 數據列集物件,可讓某個元件處理由另一個元件執行的查詢結果。 當在多台電腦上部署應用程式時,這會非常有幫助。 Recordset 和數據列集物件可以當做方法參數傳遞至佇列元件,但有下列限制:

  • 伺服器端 Recordset 物件無法使用 IPersistStream進行封送處理。 只有用戶端 Recordset 物件才能當做參數傳遞至佇列元件方法呼叫。
  • 如果您直接使用 OLE DB,則必須將 OLE DB 資料列集定義為用戶端資料列集。