我正在使用.Net Remoting處理主服務和許多(有時是50個以上)小型客戶端庫實例之間的進程間通信。從安全角度來看,服務必須只接受本地機器和其他人的連接 - 但我無法找到任何信息,而MSDN文檔似乎沒有多大幫助。C#:限制.Net遠程處理僅接受本地主機連接
最好,我想保持連接綁定到本地主機的方式,不會引發用戶的防火牆警報......但這不是必需的功能。
謝謝你的幫助!
湯姆
我正在使用.Net Remoting處理主服務和許多(有時是50個以上)小型客戶端庫實例之間的進程間通信。從安全角度來看,服務必須只接受本地機器和其他人的連接 - 但我無法找到任何信息,而MSDN文檔似乎沒有多大幫助。C#:限制.Net遠程處理僅接受本地主機連接
最好,我想保持連接綁定到本地主機的方式,不會引發用戶的防火牆警報......但這不是必需的功能。
謝謝你的幫助!
湯姆
在探索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
使用IpcChannel
如果你是.NET 2.0+。它專爲進程間通信而設計,根本不使用TCP。