2016-04-28 90 views
0

由於一些證書問題,我不得不寫ServerCertificateValidationCallback逆轉

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

這是一個更好的方式,來電後逆轉已經取得,或這是不必要的?

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

var r = func(obj); 

ServicePointManager.ServerCertificateValidationCallback = temp; 

回答

1

整個操作應該被包裹在try ... finally以確保在異常飛來飛去,原來的價值變得更加恢復。 +=可以替換爲=,除非有人使用回調來驗證其他內容(例如日誌記錄)。

當然,這個計劃在同時出現的情況下會持平。至少應該把事情放在一個關鍵的部分或互斥,以便問題表現僅僅作爲表現不佳,而不是海森堡...

+0

我注意到,如果這裏的回調是一個*事件*然後代碼默認生成事件添加器將執行適當的低鎖定算法以確保沒有丟失的添加。當然,如果這裏的回調只是一個委託 - 看起來像 - 那麼是的,你自己負責編寫代碼。 –

+0

@Eric:它被記錄爲代表。然而,即使是事件,運算符'+ ='的反轉也是' - =',而不是恢復一些舊的*和可能過時的*狀態。這會使該方案與運營商本身一樣安全(完全降低「臨時」)。當然,' - ='是有問題的,因爲它需要'物化'(捕獲)'+ ='的lambda以賦予其身份,另一個複雜因素來自'var'不能與C#中的lambdas一起使用... – DarthGizka