Modifique as configurações após chamar remoteConfiguration.configure (configfile)?
-
26-09-2019 - |
Pergunta
Minhas chamadas de aplicativo RemotingConfiguration.Configure()
Para configurar o .NET REMOT. Mas como preciso do atributo PortName do elemento dos canais para ser diferente cada vez que o aplicativo é executado, tenho que configurar essa configuração específica programaticamente.
Parece muito simples (e provavelmente é - mas eu tenho pesquisado o Google o dia todo por uma resposta).
Até agora eu tenho:
RemotingConfiguration.Configure(Program.ConfigFilePath, false);
IChannel[] regChans = ChannelServices.RegisteredChannels;
IpcChannel ipcChannel = (IpcChannel)ChannelServices.GetChannel(regChans[0].ChannelName);
O depurador me mostra que ipcChannel._serverChannel._prop
seria a tabela de hash à qual eu preciso adicionar uma entrada como ["portName"] = uniquePortName
, mas simplesmente não consigo ver como acessar e modificar isso.
Eu sei que sempre poderia descartar o arquivo *.config e fazer tudo de forma programaticamente, mas eu verdade Não quero jogar fora os benefícios de ter a maioria das configurações facilmente editáveis.
É tarde demais para modificar um IpcClientChannel
objeto uma vez RemotingConfiguration.Configure()
Voltou? Obviamente eu provavelmente poderia escrever minha própria versão de RemotingConfiguration.Configure()
, mas isso também não parece a maneira certa de fazer as coisas.
Solução
Acho que estabelecei que o que eu queria fazer não é possível.
Você pode qualquer usar RemotingConfiguration.Configure()
ou algo como:
IDictionary channelProperties = new Hashtable();
channelProperties.Add("authorizedGroup", "Everyone");
channelProperties.Add("portName", "Client-" + Guid.NewGuid().ToString()); // Unique port name
IpcChannel channel = new IpcChannel(channelProperties, null, null);
ChannelServices.RegisterChannel(channel);
Você não pode misturar e combinar. Pelo menos, esse parece ser o caso.
(É claro que você ainda pode ler qualquer uma dessas configurações do arquivo *.config, mas o ponto é que você precisa codificar explicitamente para todas as opções que pode querer oferecer suporte.)