共用方式為


使用 HTTP 作為 RPC 傳輸

RPC-over-HTTP 可讓用戶端程式使用因特網來執行遠端網路上伺服器程式所提供的程式。 HTTP 通道中的 RPC 將其呼叫通過已建立的 HTTP 埠進行傳輸。 因此,其呼叫可以跨用戶端和伺服器網路上的網路防火牆。

RPC over HTTP 會將其呼叫路由傳送至位於 RPC 伺服器網路上的 RPC Proxy。 RPC Proxy 會建立和維護與 RPC 伺服器的連線。 其可作為代理,將遠端過程調用分派給 RPC 伺服器,並通過網際網路將伺服器的回覆送回給用戶端應用程式。 下圖說明此程式。

針對 RPC HTTP,是 RPC 伺服器與 Internet 資訊伺服器之間的互動

此圖顯示用戶端應用程式網路上的防火牆。 這不是 RPC over HTTP 運作所必需的。 不過,如果用戶端網路有防火牆,它也需要 Proxy 伺服器程式,例如 Microsoft Proxy Server。

當用戶端程式使用 HTTP 作為傳輸發出遠端過程調用時,用戶端上的 RPC 執行時期程式庫會聯絡 RPC 代理。 根據 RPC 用戶端是否被要求使用 HTTP 或 HTTPS(HTTP 搭配 SSL),則分別使用連接埠 80 或連接埠 443。 RPC Proxy 會連絡 RPC 伺服器程式,並建立 TCP/IP 連線。 用戶端和 RPC Proxy 會透過因特網維護其 HTTP 或 HTTPS 連線。 如果存在,用戶端對 RPC Proxy 的 HTTP 或 HTTPS 連線可以通過防火牆(受限於適當的訪問許可權)。 然後,伺服器可以執行遠端過程調用,並使用透過 RPC Proxy 的連線來回覆用戶端。 RPC Proxy 是在 IIS 內容中執行的 ISAPI 擴充功能。

如果客戶端或伺服器因任何原因中斷連線,RPC Proxy 將會偵測到它並結束 RPC 會話。 只要會話繼續,RPC Proxy 就會維持其與客戶端和伺服器的連線。 它會將遠端過程調用從用戶端轉送至伺服器,並將回復從伺服器傳送至用戶端。

RPC 用戶端程式可以透過網際網路將其 RPC 呼叫進行傳輸,方法是建立如下格式的字串繫結:

[object_uuid@]ncacn_http:rpc_server[endpoint,HttpProxy=proxy_server:http_port,RpcProxy=rpc_proxy:rpc_port,HttpConnectionOption=UseHttpProxy]

哪裡:

  • object_uuid 指定 RPC 物件 UUID。 如需詳細資訊,請參閱 產生介面 UUID字串 UUID

  • ncacn_http 選取 RPC over HTTP 的通訊協定順序規格。 如需詳細資訊,請參閱 通訊協定序列常數字串系結

  • rpc_server 是執行 RPC 伺服器進程之電腦的網路位址。 伺服器地址必須由 RPC Proxy 計算機以可見且可理解的形式指定,而不是由用戶端指定。 由於用戶端不會直接連線到伺服器,因此不需要能夠解析伺服器的名稱,或建立與其的連接。 RPC Proxy 會代表用戶端建立連線,因此,rpc_server 必須是 RPC Proxy 可辨識的名稱。

  • 端點 指定 RPC 伺服器程式用來接聽遠端過程調用的 TCP/IP 埠。 如需詳細資訊,請參閱 尋找端點

  • HttpProxy 選擇性地指定 RPC 用戶端網路上的 HTTP Proxy 伺服器,例如 Microsoft Proxy Server。 如果選取 Proxy 伺服器,則未指定任何埠號碼,若未要求 SSL,RPC 存根預設會使用埠 80,如果指定 SSL,則會使用埠 443。

  • RpcProxy 指定 IIS 計算機的位址和埠號碼,做為 RPC 伺服器的 Proxy。 只有當 RPC 伺服器進程位於與 RPC Proxy 不同的電腦上時,才需要指定此專案。 如果您未指定通訊埠號碼,則 RPC 用戶端存根預設會在未指定 SSL 時使用埠 80,而在指定 SSL(HTTPS)時使用埠 443。

  • HttpConnectionOption 可選擇性地讓您在建立 HTTP 連線時設定 RPC 的行為。 UseHttpProxy 值會指示 RPC 始終透過 HTTP Proxy 路由傳送其流量,包括當用戶端在 Internet Explorer 中將其網際網路選項設定為「針對本機位址略過 Proxy 伺服器」時。

    Windows 7、Windows Server 2008 R2、Windows 8.1 和已安裝 KB2916915 的 Windows Server 2012 R2 支援此選項。 Windows 8 和 Windows Server 2012 不支援此選項。 應用程式可以藉由檢查位於下列登錄機碼底下的 ConnectionOptionsFlag 登錄值,判斷 RPC 運行時間是否支援此選項:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc

    如果設定此登錄值的位 0 (LSB),則會支援此特定選項:否則,系統中的 RPC 執行時間不支援此選項。

如需建立字串系結的詳細資訊,請參閱 系結和句柄

RPC 伺服器程式可以藉由接聽 ncacn_http 通訊協定順序,接受通過通道的 RPC 呼叫。

Microsoft有兩個主要的 RPC over HTTP 實作:第 1 版和第 2 版。

第 1 版(稱為 RPC over HTTP v1)可透過 Windows XP 支援。 透過 Windows 2000 支援 RPC Proxy 第 1 版。

第 2 版 (稱為 RPC over HTTP v2) 是目前的版本。

這兩個版本具有不同的功能和有限的互作性。 這裡提供差異的摘要。 如需互操作性考慮,請參閱 HTTP 上的 RPC 的系統需求和互操作性

  • 透過 HTTP v1 的 RPC 需要在 RPC over HTTP 用戶端與 RPC 代理之間的所有 HTTP 代理/防火牆上啟用 SSL 隧道。 RPC over HTTP v1 會嘗試透過埠 80 建置 SSL 通道,即使它傳送的數據實際上不是 SSL 加密。 Proxy 和防火牆通常會拒絕這類要求,除非明確設定為允許這些要求。 透過 HTTP v2 的 RPC 沒有這類需求。
  • RPC over HTTP v1 無法建立 RPC Proxy 的 SSL 工作階段。 透過 HTTP v2 的 RPC 可以透過 HTTP 流量在 SSL 作業階段內傳送所有 RPC;根據預設,v2 會要求在SSL會話內傳送數據。
  • 透過 HTTP v1 的 RPC 無法向 RPC Proxy 進行驗證。 透過 HTTP v2 的 RPC 可以驗證;根據預設,v2 需要對 RPC Proxy 進行驗證。
  • 當安裝 RPC Proxy v1 的 IIS 機器是 Web 伺服器陣列的一部分時,RPC Proxy v1 無法正常運作。 當安裝 RPC Proxy v2 的 IIS 計算機屬於 Web 伺服器陣列的一部分時,RPC Proxy v2 會正常運作。

注意

如果客戶端程式電腦上已安裝 Microsoft Internet Explorer,且您的客戶端未在其字串系結中指定 HttpProxy,RPC 用戶端存根會在客戶端電腦上搜尋登錄,以取得 HttpProxy 條目。 如果找到一個,它會使用登錄項目中指定的代理伺服器。

 

例如,假設您的用戶端程式必須透過因特網連線到名為 Server7.microsoft.com 的計算機上 RPC 伺服器。 此外,假設 RPC Proxy 會在 Major7.microsoft.com 上執行。 RPC 伺服器程式會接聽埠 2225。 您的用戶端會使用字串系結:

ncacn_http:Server7.microsoft.com[2225, RpcProxy=Major7.microsoft.com]

如果 RPC Proxy 可以將伺服器名稱解析為 Server7,而不需要完整域名,您也可以指定:

ncacn_http:Server7 [2225, RpcProxy=Major7.microsoft.com]

如果用戶端網路使用防火牆和名為 myproxy 的因特網 Proxy 伺服器,且用戶端上的 Internet Explorer 未設定為使用該 Proxy,您必須將用戶端的字串系結修改為:

ncacn_http:Server7.microsoft.com[,HttpProxy=myproxy:80,RpcProxy=Major7.microsoft.com:80]

這會指示用戶端連線到 Server7.microsoft.com 上的 RPC 伺服器程式。 若要這樣做,用戶端會先使用埠 80(如果使用 SSL 則為埠 443),以聯機到 myproxy。 這可讓用戶端程式存取因特網。 使用因特網時,用戶端程式接下來會連線到 Major7.microsoft.com 上的 RPC Proxy。 RPC Proxy 會建立與在 Server7.microsoft.com 上執行的 RPC 伺服器程式連線。

如果客戶端網路使用防火牆,而且無法直接連線到 RPC Proxy,若要更快速地建立連線,則可以修改用戶端字串系結為:

ncacn_http:Server7.microsoft.com[RpcProxy=Major7.microsoft.com:80,HttpConnectionOption=UseHttpProxy]

HttpConnectionOption 可讓您在建立 HTTP 連線時指示 RPC 的行為。 UseHttpProxy 值會指示 RPC 隨時透過 Http Proxy 路由傳送其流量,包括用戶端在 Internet Explorer 中設定其因特網選項設定為「略過本機位址的 Proxy 伺服器」時。 這會指示用戶端透過 Http Proxy 強制連線到 RPC Proxy。 這會加快建立連線的速度,因為它會略過在使用 HTTP Proxy 之前搜尋 RPC 伺服器時遇到的任何延遲。

如果使用 HttpConnectionOption 選項,且用戶端上的 Internet Explorer 未設定為使用該 Http Proxy,則連線可能會失敗,RPC_S_INVALID_NETWORK_OPTIONS

現今絕大多數的計算機都已設定為網頁流覽。 因此,大部分的客戶端不需要指定 HTTPProxy,因為它會從因特網連線設定擷取。