Ricominciamo un pò con i weekly issue ... :)

Ultimamente sto lavorando molto con remoting, di cui apprezzo la potenza e la flessibilità in applicazioni distribuite .NET rispetto ai web services. L'unica spina nel fianco è sempre stata la configurazione che, sebbene con 3.5 presenti dei messaggi di errore un tantino più amichevoli di quando ci lavoravo con 1.1, mantiene una sorta di aspetto oscuro tipo "magia nera".

Uno dei bisogni che avevo in una delle ultime applicazioni che ho fatto, era mantenere nello stesso applicativo winform una configurazione "client" o "server a seconda dell'utente scelto. Gli approcci che si trovano in giro sono tendenzialmente due:

1: "annegare" la configurazione remoting nel file di configurazione principale. Questo è comodo se si hanno due applicazioni distinte, ma scomodo in caso di una sola applicazione che "cambia faccia" a seconda di chi la usa (comporta cambiare il file di configurazione a mano o con direttive di post compilazione per differenziare i rilasci

2: Effettuare la configurazione di remoting in maniera programmatica. Molto più comodo, ma comporta comunque annegare un sacco di chiavi nel file di configurazione per evita che se cambia l'indirizzo dell'host bisogna ricompilare il progetto.

Una soluzione comoda, non molto "pubblicizzata", è creare invece due file .config, server.config e client.config con dentro solo la configurazione di remoting, configurare questi file come "copy if newer" in modo che siano copiati nella bin insieme all'eseguibile e caricare l'uno o l'altro a seconda della tipologia che mi serve con una semplice istruzione:

string configurationFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Client.config");
FileInfo configurationFile = new FileInfo(configurationFilePath); 
RemotingConfiguration.Configure(configurationFile.Name, false);

In questo modo ottengo l'effetto di poter comunque configurare programmaticamente remoting, senza perdere la comodità di usare i file di configurazione xml!