2013-09-10 82 views
1

我創建了一個Windows窗體應用程序,我想用它來連接到遠程計算機並顯示存儲在文本文件中的數據 。但是,當它嘗試連接到遠程計算機時,出現以下錯誤:需要幫助登錄到遠程計算機並閱讀文本文件

RPC服務器不可用。 (異常來自HRESULT:0x800706BA)

我使用連接到遠程計算機的代碼:

var conOpt = new ConnectionOptions(); 
     conOpt.Impersonation = ImpersonationLevel.Impersonate; 
     conOpt.EnablePrivileges = true; 
     conOpt.Username = "username"; 
     conOpt.Password = "password"; 
     var scope = new ManagementScope(String.Format(@"\\{0}\ROOT\CIMV2", "computername"), conOpt); 

     scope.Connect(); 

在網上研究之後,似乎該應用程序可能無法 允許連接因爲服務器上的防火牆設置或與端口有關。或者我可能在代碼中缺少某些東西?

這可能與遠程計算機上的組策略關聯到 允許特定的應用程序連接嗎?在配置方面還需要考慮什麼?有沒有更好的方法來做到這一點?

+0

確保RPC服務正在遠程計算機上運行net start rpcss – paqogomez

+0

看起來可能會更好地使用一些scriptong語言和ssh而不是C# – VsMaX

+0

感謝您的意見。 RPC服務正在刪除機器上運行。勝利形式的應用程序是需要的,因爲它也會做其他的事情,但我想先讓它做一些簡單的事情,比如在遠程計算機上讀取文件。 – Theomax

回答

1

遠程機器是否在域上?如果是的話,可以考慮包括在ConnectionOptions

conOpt.Authority = string.Format("ntlmdomain:{0}", domainName); 

另外,嘗試使用SecureStringSecurePassword屬性,而不是一個普通字符串。不要以爲重要,但值得一試。這是你如何創建一個SecureString

SecureString secureString = new SecureString(); 

foreach (char character in password) 
{ 
    secureString.AppendChar(character); 
} 

conOpt.SecurePassword = secureString; 

正如你提到的,它可能是防火牆阻止連接,雖然RPC連接通常不被堵塞在本地網絡(除非另有配置)。此外,要添加到paqogomez對服務的評論,請確保遠程過程調用(RPC)(或遠程過程調用(RPC)定位器如果使用XP或Windows Server 2003)正在運行。

+0

RPC定位器服務正在遠程計算機上運行。除了使用WMI類之外,還有其他的方式嗎?是否應該設置遠程計算機上的任何防火牆配置? – Theomax

+0

另一個選擇是創建一個'WCF'服務並將它託管在遠程機器上,並讓該服務將文本文件發送給客戶端。但是,如果不知道你想要達到什麼目標,我想說這可能不是最好的方法。 – PoweredByOrange