2016-04-28 19 views
0

Aufgrund einiger Zertifikat Probleme hatte ichServerCertificateValidationCallback Umkehrung

ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true; 

Ist dies eine bessere Art und Weise zu schreiben, es nach dem Aufruf rückgängig gemacht worden ist, oder ist dies nicht notwendig?

var temp = ServicePointManager.ServerCertificateValidationCallback; 
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true; 

var r = func(obj); 

ServicePointManager.ServerCertificateValidationCallback = temp; 

Antwort

1

Die ganze Operation sollte in try ... finally eingewickelt werden, um sicherzustellen, dass der ursprüngliche Wert sogar wiederhergestellt wird, wenn Ausnahmen um fliegen. += kann durch = ersetzt werden, es sei denn, einige verwenden den Rückruf für andere Dinge als Validierung (z. B. Protokollierung).

Natürlich fällt dieses Schema in einer gleichzeitigen Situation flach auf sein Gesicht. Die Sache sollte zumindest in einen kritischen Bereich gebracht oder mutexed werden, damit sich Probleme nur als schlechte Leistung manifestieren statt Heisenbugs ...

+0

Ich stelle fest, dass, wenn der Callback hier ein * event * ist, der Code standardmäßig für generiert wird Der Ereignisaddierer führt den entsprechenden Low-Lock-Algorithmus aus, um sicherzustellen, dass keine Add-Ins verloren gehen. Natürlich, wenn der Rückruf hier nur ein Delegierter ist - wie es scheint - dann sind Sie dafür verantwortlich, diesen Code selbst zu schreiben. –

+0

@Eric: Es ist dokumentiert als ein Delegierter. Aber selbst bei Ereignissen ist die Umkehrung des Operators '+ =' '' = '', wodurch ein alter - * und möglicherweise ein veralteter * - Zustand nicht wiederhergestellt wird; Dies würde das System so sicher machen, wie es die Operatoren selbst sind ("temp" ganz abfallen lassen). Natürlich ist '- =' problematisch, weil es das 'Lambda' materialisieren (fangen) muss, damit das '+ =' ihm Identität gibt, und eine andere Komplikation kommt von der Tatsache, dass 'var' nicht mit lambdas in C# funktioniert. ... – DarthGizka

Verwandte Themen