APPC 谓词和 Windows 扩展

本主题介绍 Host Integration Server 支持的 APPC 谓词和 Windows 扩展:

APPC 谓词

以下 APPC 谓词说明包含重要功能,应在使用此版本的 Windows APPC 之前阅读。

ALLOCATE 或 MC_ALLOCATE
此谓词由调用事务程序 (TP) 发出,在本地逻辑单元 (LU) 和伙伴 LU 之间分配会话, (与RECEIVE_ALLOCATE) 在调用 TP 和可调用 TP 之间建立会话。 成功执行此谓词后,APPC (conv_id) 生成 会话标识符。 conv_id是所有其他 APPC 对话谓词的必需参数。

对于使用 TP、5250 模拟器或 APPC 应用程序的用户或组,可以分配默认的本地和远程 LU。 在这种情况下,LU 别名的字段留空或为 null,当用户或组成员启动 APPC 程序时,将访问默认 LU。 有关使用默认 LU 的详细信息,请参阅 Microsoft Host Integration Server 帮助的“网络集成”部分。

RECEIVE_ALLOCATE
由可调用的 TP 颁发,以确认它已准备好与发出 ALLOCATE 或MC_ALLOCATE的调用 TP 开始对话。 这必须是可调用的 TP 发出的第一个 APPC 谓词。 初始状态为 RESET。 如果谓词成功执行 (primary_rc AP_OK) ,则状态将更改为 RECEIVE。

RECEIVE_AND_POST或MC_RECEIVE_AND_POST
异步接收应用程序数据和状态信息。 这样,当数据仍到达本地 LU 时,本地 TP 就可以继续处理。 RECEIVE_AND_POST和MC_RECEIVE_AND_POST仅受 Windows 操作系统支持。

异步RECEIVE_AND_POST或MC_RECEIVE_AND_POST未完成时,可以发出以下谓词:

REQUEST_TO_SEND或MC_REQUEST_TO_SEND

GET_TYPE

GET_ATTRIBUTES或MC_GET_ATTRIBUTES

TEST_RTS或MC_TEST_RTS

DEALLOCATE

SEND_ERROR或MC_SEND_ERROR

TP_ENDED

RECEIVE_AND_WAIT或MC_RECEIVE_AND_WAIT
接收合作伙伴 TP 当前提供的任何数据。 如果当前没有可用的数据,则本地 TP 将等待数据到达。

RECEIVE_AND_WAIT和MC_RECEIVE_AND_WAIT已被修改为像RECEIVE_AND_POST和MC_RECEIVE_AND_POST一样。 异步RECEIVE_AND_WAIT或MC_RECEIVE_AND_WAIT未完成时,可以发出以下谓词:

REQUEST_TO_SEND或MC_REQUEST_TO_SEND

GET_TYPE

GET_ATTRIBUTES或MC_GET_ATTRIBUTES

TEST_RTS或MC_TEST_RTS

DEALLOCATE

SEND_ERROR或MC_SEND_ERROR

TP_ENDED

TP_STARTED
此谓词由调用 TP 发出,通知 APPC TP 正在启动。 对于使用 TP、5250 仿真器或 APPC 应用程序的用户或组,可以分配默认的本地和远程 APPC LU。 当用户或组成员启动 APPC 程序 (TP、5250 模拟器或 APPC 应用程序) 且程序未指定 LU 别名时,将访问这些默认 LU。 有关使用默认 LU 的详细信息,请参阅网络集成帮助。

限制

主机集成服务器允许每个连接一个未完成的 Windows APPC 异步调用,每个线程一个阻塞谓词。 例如:

void ProcessVerbCompletion (WPARAM wParam, LPARAM lParam)  
{     
    int i;  
    for (i = 0; i < nPendingVerbs; i++)  
        if (pPendingVerbs[i].hAsync == wParam)  
            ProcessVCB( (LPVCB) lParam);  
}    . . .  
LRESULT CALLBACK SampleWndProc ( ... )  
{  
    if (msg == uAsyncAPPC) {  
        ProcessVerbCompletion(wParam; lParam);  
    }  
        else switch (msg) {  
        case WM_USER:  
            if (hAsync = WinAsyncAPPC(hwnd, &vcb))  
               pPendingVerbs [nPendingVerbs++].hAsync = hAsync;  
            break;  
    }  
}  
WinMain ( ... )  
{  
    if ( ( WinAPPCStartup ( ...) = = FALSE ) {  
    return FALSE ;  
    }  
    uAsyncAPPC = RegisterWindowsMessage ("WinAsyncAPPC") ;  
    while (GetMessage ( ...)  )  {  
    ...  
    WinAPPCCleanup ( ... )  
}  

注意

未完成异步调用的规则例外是RECEIVE_AND_POST、MC_RECEIVE_AND_POST、RECEIVE_AND_WAIT和MC_RECEIVE_AND_WAIT。 虽然这些谓词未完成,但也可以调用某些其他谓词。