2009-10-07 28 views
3

我正在使用.Net Remoting處理主服務和許多(有時是50個以上)小型客戶端庫實例之間的進程間通信。從安全角度來看,服務必須只接受本地機器和其他人的連接 - 但我無法找到任何信息,而MSDN文檔似乎沒有多大幫助。C#:限制.Net遠程處理僅接受本地主機連接

最好,我想保持連接綁定到本地主機的方式,不會引發用戶的防火牆警報......但這不是必需的功能。

謝謝你的幫助!

湯姆

回答

4

在探索IpcChannel文檔時,我最終陷入了困境。

IpcChannel的問題在於,當客戶端作爲低完整性進程運行時,Windows命名管道在UAC下無法正常工作。不幸的是,由於我在使用插件而不是完整的應用程序,插件主機的低完整性意味着調用一堆Win32 API(包括特定於Vista的一些新的應用程序)並以編程方式設置應用程序令牌ACL,這是我真的不想這樣做。

幸運的是,RegisterChannel()的一些重載形式允許您在System.Collections.IDictionary Hashtable對象中指定選項,其中幾個必須處理安全性並處理遠程連接。這裏更多的信息:

http://msdn.microsoft.com/en-us/library/bb187434%28VS.85%29.aspx

我結束了我的回覆代碼回的TcpChannel執行,並在服務器改變一些東西,這是工作奇妙。沒有汗!

  System.Collections.IDictionary sProperties = new System.Collections.Hashtable(); 

     sProperties["port"] = SERVER_PORT; 
     sProperties["authorizedGroup"] = "INTERACTIVE"; 
     sProperties["rejectRemoteRequests"] = true; 

     BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider(); 

     TcpServerChannel channel = new TcpServerChannel(sProperties, serverProvider); 
     ChannelServices.RegisterChannel(channel, false); 

對不起,拿走你的答案,但我偶然發現了一些能夠準確回答我的問題。

tom

2

使用IpcChannel如果你是.NET 2.0+。它專爲進程間通信而設計,根本不使用TCP。

相關問題