Share via


讓伺服器可在網路上使用

在伺服器應用程式可以接受遠端程序呼叫之前,它必須可在網路上使用。 若要這樣做,伺服器會向 RPC 執行時間指出它願意接受一或多個通訊協定序列上的呼叫。 選擇伺服器應用程式支援的通訊協定順序是重要的決策;不同的通訊協定序列具有非常不同的功能。 預期在本機接收呼叫的伺服器應該使用 ncalrpc 。 接受遠端呼叫的伺服器 應該使用 ncacn_ip_tcp。 伺服器不應該確認接收呼叫的通訊協定順序是他們預期接收呼叫的通訊協定順序。 如需詳細資訊,請參閱 警惕在同一進程中 執行的其他 RPC 端點。

下列程式碼範例使用 ncacn_ip_tcp

大部分的伺服器程式都會使用網路上可用的所有通訊協定序列。 若要這樣做,他們會叫 用 RpcServerUseProtseq 函式,如下列程式碼片段所示:

RPC_STATUS status;
status = RpcServerUseProtseq(
    L"ncacn_ip_tcp",
    RPC_C_PROTSEQ_MAX_REQS_DEFAULT,    // Protseq-dependent parameter
    NULL);                             // Always specify NULL here.

RpcServerUseProtseq 函式的第一個參數 是通訊協定序列。 第二個參數相依于通訊協定序列。 如程式碼範例所示,大部分的伺服器程式會將該參數設定為 RPC_C_PROTSEQ_MAX_REQS_DEFAULT 。 該值會將 RPC 程式庫設定為使用預設值。 第三個參數是安全性描述元,不應該在應用程式中使用。 如需詳細資訊,請參閱 安全性 (RPC)

您也可以呼叫 RpcServerUseAllProtseqs 、RpcServerUseProtseqEx RpcServerUseProtseqEp RpcServerUseProtseqEpEx 函式。

在伺服器應用程式選取至少一個通訊協定順序之後,使用動態端點的伺服器必須為其使用的每個通訊協定順序建立系結資訊。 伺服器會將系結資訊儲存在系結向量中,然後匯出至端點對應程式服務。

使用 RpcServerInqBindings 函式來取得伺服器應用程式的系結向量,如下列範例所示:

RPC_STATUS status;
RPC_BINDING_VECTOR *rpcBindingVector;
 
status = RpcServerInqBindings(&rpcBindingVector);

傳遞至 RpcServerInqBindings 函式的唯一參數是指向RPC_BINDING_VECTOR 結構的指標 RPC 執行時間程式庫會動態配置系結向量的陣列,並將陣列的位址儲存在該參數變數中(在此案例中為 rpcBindingVector )。 當伺服器應用程式使用該系結向量完成之後(例如,將它傳遞至適當的函式之後),伺服器應用程式會負責使用 RpcBindingVectorFree 函式釋放該系結向量。