共用方式為


遠端過程調用 (RPC) 錯誤疑難解答指引

當您在遠端過程調用 (RPC) 工作階段期間或使用各種Microsoft管理主控台 (MMC) 嵌入式管理單元時,連線到 Windows Management Instrumentation (WMI) 或 Microsoft SQL Server 時,可能會遇到「RPC 伺服器無法使用」錯誤。下圖顯示 RPC 錯誤的範例。

顯示 RPC 伺服器無法使用的錯誤訊息螢幕快照。

這是常見的網路錯誤,需要一些基本的熟悉程式才能成功進行疑難解答。 首先,有數個重要詞彙需要瞭解:

  • 端點對應程式 (EPM):在伺服器上接聽的服務,並使用埠和 UUID 資訊引導用戶端應用程式到伺服器應用程式。 此服務是 RPC 子系統的一部分,可解析動態端點以回應用戶端要求。 在某些情況下,它會以動態方式將端點指派給伺服器。
  • :描述 RPC 通訊協定,讓客戶端和伺服器能夠交涉連線。
  • 樓層:包含特定數據之塔內的內容層,例如埠、IP 位址和標識符。
  • UUID:識別 RPC 應用程式的已知 GUID。 在疑難解答期間,您可以使用 UUID 來追蹤單一應用程式類型的 RPC 交談(一次發生在單一計算機上的許多類型之一)。
  • Opnum:識別用戶端想要伺服器執行的函式。 這隻是十六進位數位。 不過,良好的網路分析器會為您轉譯函式。 如果無法識別函式,請連絡您的應用程式廠商。
  • :用戶端或伺服器應用程式的通訊端點。 EPM 會配置動態埠(也稱為高端口或暫時埠),供客戶端和伺服器使用。

    注意

    埠號碼通常是您將用來進行疑難解答的最重要資訊。

  • 存根數據:用戶端上的函式與伺服器上的函式之間交換的數據。 此數據是承載,這是通訊的重要部分。

線上的運作方式

下圖顯示連線到伺服器以執行遠端作業的用戶端。 用戶端一開始會連絡伺服器上的 TCP 連接埠 135,然後與 EPM 交涉以取得動態埠號碼。 在 EPM 指派埠之後,用戶端會中斷連線,然後使用動態埠連線到伺服器。

顯示用戶端如何對遠端伺服器進行 RPC 連線的圖表。

重要

如果防火牆分隔用戶端和伺服器,防火牆必須在埠 135 和 EPM 指派的動態埠上允許通訊。 管理此案例的其中一種方法是指定要使用 EPM 的埠或埠範圍。 如需詳細資訊,請參閱 設定 RPC 如何配置動態埠

某些防火牆也允許 UUID 篩選。 在此案例中,如果 RPC 要求使用埠 135 跨越防火牆並連絡 EPM,防火牆會記下與要求相關聯的 UUID。 當 EPM 回應並傳送該 UUID 的動態埠號碼時,防火牆也會記下埠號碼。 防火牆接著允許該 UUID 和埠的 RPC 系結作業。

設定 RPC 配置動態埠的方式

根據預設,EPM 會從針對 TCP 和 UDP 設定的範圍隨機配置動態埠(根據所使用的操作系統實作)。 不過,這種方法可能並不實用,特別是當用戶端和伺服器必須透過防火牆進行通訊時。 替代方法是指定要使用 EPM 的埠號碼或埠號碼範圍,並在防火牆中開啟這些埠。

許多依賴 RPC 的 Windows 伺服器應用程式會提供選項(例如登錄機碼)來自定義允許的埠。 Windows 服務會 針對這項工作使用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\Internet 子機碼。

當您指定埠或埠範圍時,請使用超出常用埠範圍的埠。 您可以在 Windows 的服務概觀和網路埠需求中找到 Windows 和主要Microsoft產品中使用的伺服器埠完整清單。 本文也會列出 RPC 伺服器應用程式,並提到哪些 RPC 伺服器應用程式可以設定為使用 RPC 執行時間功能以外的自訂伺服器埠。

重要

這個章節、方法或工作包含修改登錄的步驟。 然而,不當修改登錄可能會發生嚴重的問題。 因此,請務必小心執行下列步驟。 若要獲得保護,請在進行修改前先備份登錄,以便在出現問題時還原登錄。 如需備份和還原登錄的詳細資訊,請參閱如何在 Windows 中備份及還原登錄

根據預設, 因特網 密鑰不存在。 因此,您必須建立它。 針對因特網金鑰,您可以設定下列專案:

  • 埠REG_MULTI_SZ:指定埠或包含的埠範圍。 出現在 [因特網] 底下的其他專案會指出這些是要使用的埠,還是要從使用中排除的埠。

    • 值範圍: 0 - 65535
      例如, 5984 代表單一埠,而 5000–5100 代表一組埠。 如果有任何值超出 065535 的範圍,或無法解譯任何值,RPC 運行時間會將整個組態視為無效。
  • PortsInternetAvailable REG_SZ:指定 Ports 值是否代表要包含的埠或要排除的埠。

    • 值: YN (不區分大小寫)
      • Y:埠專案中列出的埠代表該電腦上可供 EPM 使用的所有埠。
      • N:埠專案中列出的埠代表 EPM 無法使用的所有埠。
  • UseInternetPorts REG_SZ:指定預設系統原則。

    • 值: YN (不區分大小寫)
      • Y:使用預設系統原則的程式會從一組因特網可用的埠指派埠,如先前所定義。
      • N:使用預設系統原則的進程會從一組僅限內部網路埠指派埠。

您應該開啟大於埠 5000 的埠範圍。 小於 5000 的埠號碼可能已由其他應用程式使用,而且可能會與您的 DCOM 應用程式發生衝突。 此外,先前的體驗顯示至少應該開啟 100 個埠。 這是因為數個系統服務依賴這些 RPC 埠彼此通訊。

注意

所需的埠數目下限可能會與計算機不同。 如果 RPC 動態埠受到限制,支援更多流量的電腦可能會遇到埠耗盡。 如果您限制埠範圍,請將此納入考慮。

警告

如果埠設定發生錯誤,或集區中沒有足夠的埠,EPM 就無法註冊使用動態端點的 RPC 伺服器應用程式(包括 Windows 服務,例如 Netlogon)。 如果發生設定錯誤,錯誤碼為 87 (0x57) ERROR_INVALID_PARAMETER。 例如,如果埠不足,Netlogon 會記錄事件 5820:

記錄檔名稱:系統
來源:NETLOGON
事件標識碼:5820
層級:錯誤
關鍵字:傳統
描述:
Netlogon 服務無法新增 AuthZ RPC 介面。 服務已終止。 發生下列錯誤:「參數不正確」。

如需 RPC 運作方式的詳細資訊,請參閱 透過 IT/Pro 的 RPC。

自定義埠組態的範例

在此範例中,會任意選取埠 5000 到 6000(含),以協助說明如何設定新的登錄專案。 此範例不是任何特定系統所需埠數目下限的建議。 這類設定需要在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc 底下新增因特網密鑰,並新增下列專案:

  • 埠MULTI_SZ
    • 數據類型: MULTI_SZ
    • 值: 5000-6000
  • PortsInternetAvailable REG_SZ
    • 數據類型: REG_SZ
    • 值: Y
  • UseInternetPorts REG_SZ
    • 數據類型: REG_SZ
    • 值: Y

計算機必須重新啟動,此設定才會生效。 之後,所有使用 RPC 的應用程式都會在 5000 到 6000 的範圍內指派動態埠(含)。

針對 RPC 錯誤進行疑難解答

PortQry

PortQry 可讓您在深入探討網路追蹤數據之前,快速瞭解 RPC 的運作方式。 您可以藉由在用戶端電腦上執行下列命令,快速判斷是否可以建立連線:

Portqry.exe -n <ServerIP> -e 135

注意

在此命令中, <ServerIP> 代表您要連絡之伺服器的 IP 位址。

例如,請考量下列命令:

Portqry.exe -n 10.10.10.10 -e 135

這個指令會產生類似下列摘錄的輸出:

Querying target system called:
10.10.10.10
Attempting to resolve IP address to a name...
IP address resolved to RPCServer.contoso.com
querying...
TCP port 135 (epmap service): LISTENING
Using ephemeral source port
Querying Endpoint Mapper Database...
Server's response:
UUID: d95afe70-a6d5-4259-822e-2c84da1ddb0d
ncacn_ip_tcp:10.10.10.10[49664]

藉由檢查此輸出,您可以判斷下列資訊:

  • DNS 正常運作(它已將 IP 位址解析為完整功能變數名稱 (FQDN) 。
  • PortQry 已連絡目標電腦上的 RPC 連接埠 (135)。
  • EPM 回應 PortQry,並指派動態埠 49664(以方括弧括住)進行後續通訊。
  • PortQry 已重新連線到埠 49664。

如果這些步驟有任何失敗,您通常可以開始收集同時的網路追蹤,如下一節所述。

如需 PortQry 的詳細資訊,請參閱 使用 PortQry 命令行工具

Netsh

您可以使用 Windows netsh 工具來同時在用戶端和伺服器上收集網路追蹤數據。

若要收集同時的網路追蹤,請在用戶端和伺服器上開啟提升許可權的命令提示字元視窗。

在用戶端上,執行下列命令:

Netsh trace start scenario=netconnection capture=yes tracefile=c:\client_nettrace.etl maxsize=512 overwrite=yes report=yes

在伺服器上,執行下列命令:

Netsh trace start scenario=netconnection capture=yes tracefile=c:\server_nettrace.etl maxsize=512 overwrite=yes report=yes

現在,請嘗試在用戶端電腦上重現您的問題。 然後,在這兩個視窗的命令提示字元中執行下列命令,以停止追蹤:

Netsh trace stop

在 Microsoft 網路監視器 3.4 或訊息分析器中開啟追蹤檔案,並篩選伺服器或用戶端電腦和 TCP 連接埠 135 IP 位址的追蹤數據。 例如,使用篩選字串,例如:

  • Ipv4.address==<client-ip 和 ipv4.address>==<server-ip> 和 tcp.port==135

    在此篩選字串中,<client-ip> 代表用戶端的IP位址,而< server-ip> 代表伺服器的IP位址。

  • tcp.port==135

在篩選的數據中,尋找 [通訊協定] 數據行中的 EPM 專案。

尋找 EPM (在伺服器上) 包含動態埠號碼的回應。 如果動態埠號碼存在,請記下它以供日後參考。

顯示已醒目提示動態埠的網路監視器螢幕快照。

重新整理動態埠號碼和伺服器IP位址的追蹤數據。 例如,使用篩選字串,例如 tcp.port==<dynamic-port-allocated> 和 ipv4.address==<server-ip。> 在此篩選字串中,<dynamic-port-allocated> 代表動態埠號碼,而< server-ip> 代表伺服器的 IP 位址。

已套用篩選的網路監視器螢幕快照。

在篩選的數據中,尋找用戶端成功連線到動態埠的辨識項,或尋找可能發生的任何網路問題。

無法連線到埠

最常見的「RPC 伺服器無法使用」錯誤原因是客戶端無法連線到已配置的動態埠。 用戶端追蹤接著會顯示動態埠的 TCP SYN 重新傳輸。

顯示 TCP SYN 重新傳輸的網路監視器螢幕快照。

此行為表示下列其中一個狀況正在封鎖通訊:

  • 動態埠範圍在環境中的防火牆上遭到封鎖。
  • 中間裝置正在卸除封包。
  • 目的地伺服器正在卸除封包。 此狀況可能是由 Windows 篩選平臺 (WFP) 封包捨棄、網路介面卡 (NIC) 封包捨棄或篩選驅動程式修改等設定所造成。

收集數據以進行更深入的疑難解答

在您連絡Microsoft支援之前,建議您收集問題的相關信息。

必要條件

這些程式會使用 TroubleShootingScript (TSS) 工具組。 若要使用此工具組,您應該注意下列必要條件:

  • 您必須擁有本機電腦上的系統管理員層級許可權。

  • 第一次執行工具組時,您必須接受EULA。

  • 請確定電腦的 Windows PowerShell 命令稿執行原則設定為 RemoteSigned。 如需 PowerShell 執行原則的詳細資訊,請參閱 about_Execution_Policies

    注意

    如果您的環境防止您在計算機層級使用 RemoteSigned ,您可以暫時在進程層級設定它。 若要這樣做,請在提升許可權的 Powershell 命令提示字元視窗中執行下列 Cmdlet,再啟動工具:

    PS C:\> Set-ExecutionPolicy -scope Process -ExecutionPolicy RemoteSigned
    

    若要確認變更生效,請執行 PS C:\> Get-ExecutionPolicy -List Cmdlet。

    進程層級許可權僅適用於目前的PowerShell工作階段。 關閉 PowerShell 視窗之後,執行原則會還原為原始設定。

在連絡Microsoft支援之前收集重要資訊

  1. 在所有節點上下載 TSS ,並將其展開至 C:\tss 資料夾。

  2. 提升許可權的 PowerShell 命令提示字元視窗中開啟 C:\tss 資料夾。

  3. 執行下列 Cmdlet 來啟動問題電腦上的追蹤:

    .\TSS.ps1 -Scenario NET_RPC
    
  4. 回應 EULA 提示。

  5. 重現問題。 您可以使用 事件檢視器 或 wbemtest 之類的工具來監視或測試問題。

  6. 重現問題之後,請立即停止收集數據。

  7. 在自動化腳本完成收集必要數據之後,請將數據附加至您的支援要求。