Ich verwende WCF in der Kommunikation zwischen einem Server und einem Client (beide in C# geschrieben).Programmgesteuertes WCF-Timeout im Debug-Modus
Im Freigabemodus sollten die Timouts auf ~ 20 Sekunden eingestellt sein, aber im Debug-Modus möchte ich sie auf einen höheren Wert setzen, damit ich meinen Code debuggen/betreten kann, ohne dass das Timeout auftritt.
Ich weiß, dass ich die Timeouts ändern kann, indem Sie die app.config-Datei ändern. Allerdings habe ich zwei verschiedene Bindungen und 4 Timeout-Werte in jedem, so dass ich an mehreren Stellen wechseln musste, und es ist leicht zu vergessen.
Um dies zu lösen, möchte ich einen kleinen #if DEBUG-Abschnitt in meinem Code haben, der die Timeout-Werte programmatisch auf 1 Stunde ändert.
Ich habe versucht, den folgenden Code zu verwenden, um dies zu tun:
Configuration configuration =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ServiceModelSectionGroup serviceModel =
ServiceModelSectionGroup.GetSectionGroup(configuration);
BindingsSection bindings = serviceModel.Bindings;
foreach (var configuredBinding in bindings.WSHttpBinding.ConfiguredBindings)
{
configuredBinding.CloseTimeout = new TimeSpan(0, 30, 0);
configuredBinding.OpenTimeout = new TimeSpan(0, 30, 0);
aber die * Timeout Eigenschaften sind nur lesbar, damit ich einen Kompilierungsfehler erhalten.
Ich bin nicht begeistert von der Idee, Bindungen programmatisch neu zu erstellen. Wenn ich einige der Attribute in der app.config ändere, muss ich daran denken, die gleiche Änderung im Code vorzunehmen, um sicherzustellen, dass das Debug-Verhalten dem Release-Verhalten ähnlich ist (außer den Timeouts).
Jeder hat einen guten Tipp, wie man damit umgeht?
In einem 'Klienten', das einzige Timeout meisten Menschen jemals brauchen, ist die 'sendTimeout' https://social.msdn.microsoft.com/Forums/vstudio/en- US/84551e45-19a2-4d0d-bcc0-516a4041943d/Erklärung der unterschiedlichen Timeout-Typen –