共用方式為


使用 HTTP 作為 RPC 傳輸

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

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

rpc 伺服器與 rpc HTTP 的網際網路資訊伺服器之間的互動

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

當用戶端程式使用 HTTP 做為傳輸發出遠端程序呼叫時,用戶端上的 RPC 執行時間程式庫會連絡 RPC Proxy。 視要求 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 伺服器。 如果選取 Proxy 伺服器,則未指定埠號碼,若未要求 SSL,則 RPC 存根預設會使用埠 80,如果指定 SSL,則會使用埠 443。

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

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

    已安裝 KB2916915 的 Windows 7、Windows Server 2008 R2、Windows 8.1和 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 版。

Windows XP 支援第 1 版 (透過 HTTP v1) 呼叫 RPC。 透過 Windows 2000 支援 RPC Proxy 第 1 版。

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

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

  • 透過 HTTP v1 的 RPC 需要在 RPC over HTTP 用戶端與 RPC Proxy 之間的所有 HTTP Proxy/防火牆上啟用 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 會話內傳送資料。
  • RPC over HTTP v1 無法向 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 專案的登錄。 如果找到其中一個,它會使用登錄專案中指定的 Proxy。

 

例如,假設您的用戶端程式必須透過網際網路連線到名為 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 伺服器程式。 若要這樣做,如果使用 SSL) 連線到 myproxy,用戶端會先使用埠 80 (或埠 443。 這可讓用戶端程式存取網際網路。 用戶端程式接著會使用網際網路連線到 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,因為它會從網際網路連線設定擷取。