使用 LUA 時的SNA 考量

本節說明撰寫邏輯單元應用程式 (LUA) 應用程式時,您需要考慮的 SNA 資訊。

BIND 檢查

在 LU 會話初始化期間,主機會傳送 BIND 訊息給 LUA 應用程式,其中包含要求/回應單位 (RU) 大小等資訊,以供 LU 會話使用。 Microsoft® Host Integration Server 會將此訊息傳回 至 RUI_READ上的 LUA 應用程式。 LUA 應用程式必須確認 BIND 上指定的參數是否適合。 應用程式具有下列選項:

  • 它可以接受 BIND,方法是發出包含 BIND 回應 的RUI_WRITE 。 回應上無法傳送其他 BIND 資料。

  • 它可以嘗試交涉一或多個 BIND 參數。 (只有在 BIND 是 ) 若要這樣做,應用程式會發出包含 OK 回應 RUI_WRITE ,但包含修改過的 BIND 作為資料時,才允許這麼做。

  • 它可以藉由發出包含負回應 的RUI_WRITE ,使用適當的 SNA 感知碼作為資料來拒絕 BIND。

    驗證 BIND 參數,並確保所有傳送的訊息都與它們一致,是 LUA 應用程式的責任。 不過,適用下列兩項限制:

  • 主機整合伺服器會拒絕任何 指定 RU 長度大於 BIND 上指定大小的RUI_WRITE。

  • 主機整合伺服器需要 BIND 指定次要 LU 是爭用勝者,而錯誤復原是競爭失敗者的責任。

    注意

    若為 SLI,應用程式必須指定它會在SLI_OPEN上使用SLI_BIND_ROUTINE,如果它會執行任何 BIND 檢查。

提供通知

主機整合伺服器會保留從主機接收的要求記錄,以便讓應用程式傳送的任何回應與適當的要求相互關聯。 當應用程式傳送回應時,Host Integration Server 會將回應與原始要求中的資料相互關聯,然後釋放與其相關聯的儲存體。

如果主機只指定例外狀況回應 (可以傳送負回應,但不應該) 傳送正回應,則主機整合伺服器仍必須保留要求的記錄,以防應用程式後續傳送負回應。 如果應用程式未傳送回應,則無法釋放與此要求相關聯的儲存體。

因此,主機整合伺服器可讓 LUA 應用程式向主機發出僅限例外狀況回應要求的正面回應。 (這稱為「通知」。) 回應不會傳送至主機,但 LUA 會用來清除與要求相關聯的儲存體。

注意

應用程式不需要針對每個僅限例外狀況回應的要求傳送通知。 為了提高效率,應用程式可以較不頻繁地回應。 節點會將通知視為所有先前擱置要求的隱含通知。

區分 SNA 感知碼與其他次要傳回碼

非合理程式碼的次要傳回碼一律在其前兩個位元組中包含零的值。

SNA 感知程式碼一律在其前兩個位元組中包含非零值。 第一個位元組提供感知程式碼類別,而第二個位元組會識別該類別內的特定感知程式碼。 (第三個和第四個位元組可以包含其他資訊,也可以是零。)

SNA 感知碼的相關資訊

如果您需要傳回之感知程式碼的相關資訊,請參閱

負面回應和 SNA 感知碼

在下列情況下,SNA 感知碼可以傳回至 LUA 應用程式:

  • 當主機從 LUA 應用程式將負回應傳送至要求時,它包含 SNA 感知碼,指出負面回應的原因。 系統會在後續 RUI_READSLI_RECEIVE 上向應用程式回報下列資訊。

    感知程式碼 Description
    主要傳回碼 LUA_OK。
    要求/回應指標、回應類型指標,以及包含的感知資料指標 全部設定為 1,表示包含感知資料的負面回應。
    傳回的資料 SNA 感知程式碼。
  • 當 Host Integration Server 從主機接收不正確資料時,通常會將負面回應傳送給主機,而不會將不正確資料傳遞至 LUA 應用程式。 系統會在後續 RUI_READSLI_RECEIVERUI_BIDSLI_BID 上回報該應用程式,並包含下列資訊:

    感知程式碼 Description
    主要傳回碼 LUA_NEGATIVE_RESPONSE。
    次要傳回碼 傳送至主機的 SNA 感知程式碼。
  • 在某些情況下,主機整合伺服器會偵測主機所提供的資料無效,但無法判斷要傳送的正確意義程式碼。 在此情況下,它會在例外狀況要求中傳遞不正確資料, (EXR) 至 RUI_READ 上的 LUA 應用程式,或使用下列資訊 SLI_RECEIVE

    感知程式碼 Description
    要求/回應指標 設定為 0,表示要求。
    內含指標的感知資料 設定為 1,表示包含感知資料。 (此指標通常用於 response.)
    訊息資料 建議的 SNA 感知程式碼。

    然後,應用程式必須將負回應傳送至訊息。 它可以使用主機整合伺服器所建議的感知程式碼,也可以改變感知程式碼。

  • 主機整合伺服器可以將感知程式碼傳送至應用程式,以指出應用程式所提供的資料無效。 系統會在 RUI_WRITESLI_SEND 上向應用程式回報下列資訊。

    感知程式碼 Description
    主要傳回碼 LUA_UNSUCCESSFUL。
    次要傳回碼 SNA 感知程式碼。

    可在 LUA 動詞命令上以次要傳回碼傳回的感知碼會列在 WINLUA 中。H 標頭檔。 如需此檔案,請參閱主機整合伺服器或 SNA SDK。

起 搏

步調是由 LUA 介面處理。 LUA 應用程式不需要控制步調,而且絕對不應該設定步調指標旗標。

如果在從 LUA 應用程式傳送至主機的資料上使用步調, (由 BIND) 決定, RUI_WRITESLI_SEND 可能需要一些時間才能完成。 這是因為 LUA 必須等候主機的步調回應,才能傳送更多資料。

例如,如果 LUA 應用程式以單向傳輸大量資料,或從主機 (例如,檔案傳輸應用程式) ,主機組態應該指定該方向使用步調。 這可確保接收資料的節點不會用到資料,也不會用盡資料儲存體。

清除資料到鏈結結尾

當主機將要求單位鏈結傳送至 LUA 應用程式時,應用程式可以等到在傳送回應之前收到鏈結中的最後一個 RU,也可以將負回應傳送至不是鏈結中最後一個 RU 的 RU。 如果負回應在鏈結中傳送,LUA 會清除此鏈結中的所有後續 RU,而不會將它們傳送至應用程式。

當 LUA 收到鏈結中的最後一個 RU 時,它會將 RUI_READ 的主要傳回碼或 RUI_BID 設定為具有零次要傳回碼LUA_NEGATIVE_RESPONSE,以向應用程式指出此情況。

主機可以藉由在中間鏈結中傳送如 CANCEL 之類的訊息來終止鏈結。 在此情況下,CANCEL 訊息會傳回至應用程式RUI_READ。 不會使用LUA_NEGATIVE_RESPONSE傳回碼。

分割

RU 的分割是由 LUA 介面處理。 LUA 一律會將完整的 RU 傳遞至應用程式,而應用程式應將完整的 RU 傳遞至 LUA。