Share via


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

適用於: Windows 用戶端

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

錯誤訊息的螢幕快照,指出發生下列錯誤:RPC 伺服器無法使用。

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

  • 端點對應程式 (EPM) :在伺服器上接聽並使用埠和 UUID 資訊將用戶端應用程式引導至伺服器應用程式的服務。
  • 臺:描述可讓客戶端和伺服器交涉連線的 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 169.254.0.2 -e 135

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

Querying target system called:
169.254.0.2
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:169.254.0.2[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 或 Message Analyzer 中開啟追蹤檔案,並篩選伺服器或用戶端電腦 IP 位址和 TCP 連接埠 135 的追蹤數據。 例如,使用篩選字串,如下所示:

  • 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>。 在此篩選字串中, <動態埠配置> 代表動態埠號碼,而 <server-ip> 代表伺服器的 IP 位址。

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

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

無法連線到埠

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

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

此行為表示下列其中一個條件封鎖了通訊:

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

在您連絡 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. 在自動化腳本完成收集所需的數據之後,請將數據附加至您的支援要求。