俞木發

RPC是“Remote ProcedureCall”的簡稱,直譯為“遠程過程調用”,它是Windows為一個節點請求另一個節點提供的系統服務。比如在局域網中,客戶端(以下簡稱為電腦A)要訪問部署在服務端(以下簡稱為電腦B)的共享打印機。由于打印機沒有安裝在電腦A上,因此電腦A對打印機的訪問就需要通過網絡調用,RPC的作用就是用來表達調用的語義和傳達調用的數據。如果系統提示RPC服務不可用,那么電腦A就無法成功訪問打印機了。RPC的連接流程如圖所示(圖2),可以看到在整個連接過程中,最容易導致RPC故障的主要就是系統服務、通信協議、防火墻、遠程服務端以及電腦A、B本地網絡狀態這五個環節。
如上所述,我們知道了產生RPC連接問題的五個主要環節。下面我們就主要針對這些環節介紹相應的解決方案。
1系統服務狀態檢測
Windows中的RPC連接是通過“Remote Procedure Call(RPC)”服務提供的,該服務又和“RPC Endpoint Mapper”、“DCOM Server Process Launcher”等服務相關聯。因此,在遇到RPC服務不可用時,我們需要先對電腦A和電腦B中的上述三個服務的狀態進行檢測。在任務欄的搜索框中輸入“services.msc”啟動服務組件,找到上述三個服務(需要同時檢測電腦A和B),然后將它們的啟動狀態均設置為“自動”,并啟動這些服務(圖3)。
2通信協議狀態檢測
RPC服務使用的網絡通信協議主要是本機以太網的“Microsoft網絡的文件和打印機共享”和“Internet協議版本6(TCP/IPv6)”。如果服務狀態檢測沒有問題,那么可以在任務欄的搜索框中輸入“以太網設置”(需要檢測電腦A和B),然后依次執行“更改適配器選項→選中本機網卡→右擊選擇屬性”,在打開的窗口中確保上述兩個項目前的復選框均已勾選,最后點擊“確定”保存并退出(圖4)。
3防火墻狀態檢測
如圖2的流程所示,RPC服務在電腦A發起遠程連接,以及電腦B返回連接請求的時候都要通過防火墻。如果電腦的防火墻對一些端口進行了限制,那么也會導致RPC服務不可用。比如常規的RPC服務需要用到TCP/135端口連接,端口連接狀態可以使用PowerShell命令進行檢測。以管理員身份啟動PowerShell后輸入并執行“ipconfig”命令,在窗口中記住本機的IP地址,假設電腦A的地址是“192.168.1.5”。繼續執行“Test-NetConnection 192.168.1.5-port 135”命令進行檢測,這里確保“TcpTestSucceeded”狀態顯示為“True”(表示可以成功連接135端口)(圖5)。
如果上述狀態顯示為“False”(表示135端口不可用),那么我們就需要對電腦A(主要檢測出站規則)和電腦B(主要檢查入站規則)的防火墻規則進行檢查。以檢查電腦B的入站規則為例,在桌面任務欄的搜索框中輸入“高級安全”,啟動“高級安全Windows Defender防火墻”,在左側的窗格中切換到“入站規則”,然后在右側的窗格中檢查“操作”狀態為“阻止”的規則,打開相應的規則后切換到“協議和端口”,查看是否有阻止TCP/135端口的設置,如有則將該規則刪除即可(圖6)。電腦A的出站規則的檢測類似。
4遠程電腦狀態檢測
如圖2的流程所示,電腦A在進行RPC連接時需要得到遠程電腦B的響應,如果電腦B的網絡出現問題也會導致RPC不可用。電腦A、B之間網絡互通可以通過Ping命令來測試,比如已經知道之前連接的電腦B的IP地址是192.168.1.6,在電腦A上啟動命令提示符后輸入并執行“ping 192.168.1.6”,如果顯示“無法訪問目標主機”,那么說明電腦A與B的網絡打印機之間線路不通(圖7)。此時就需要對電腦A、B的網絡設置進行檢測。比如可以用電腦A、B分別Ping電腦C,以確定電腦A、B和其他局域網電腦的網絡是否有問題,然后再進行對應的檢測;檢查電腦A、B的IP是否處在同一網段,還有子網掩碼是否相同,如果不一致,進行對應的設置;檢查電腦A、B防火墻的設置,必要時關閉防火墻再連接測試;檢查電腦B是否已經開機等。

5電腦本地網絡狀態檢測
如上所述,RPC是為節點之間的網絡訪問提供服務,如果本地電腦的網絡狀況出現問題,也會導致RPC服務不可用。如果使用上述介紹的方法進行檢測均沒有問題,比如電腦A可以Ping通電腦B,但是問題依舊,那么可能是電腦A本地DNS緩存的問題。可以在命令提示符窗口中繼續執行“ipconfig/flushdns”命令(清空本地DNS緩存)。如果RPC服務器上運行的電腦B的名稱最近做過更改,那么可以在電腦B上執行“ipconfig/registerdns”命令,將其重新注冊到活動目錄DNS中,這樣一般可以解決問題(圖8)。