Um die SSL-Zertifikatsfehler zu ignorieren, setze ich ServicePointManager.ServerCertificateValidationCallback
in eine statische Methode, bevor ich eine HttpWebRequest
mache. Ich möchte nur, dass dies für interne Anforderungen getan wird, und so setze ich die Eigenschaft auf den Standardwert im Block finally
zurück. Aber da es sich um eine Webanwendung handelt, gibt es Probleme, wenn mehrere Threads die Eigenschaft ändern?Ist es für mehrere Threads sicher, ServicePointManager.ServerCertificateValidationCallback festzulegen?
Hier ist, wie ich die Eigenschaft bin mit
public static String GetResource()
{
try
{
ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
}
catch()
{
}
finally
{
ServicePointManager.ServerCertificateValidationCallback -= delegate { return false; };
}
}
- Wird dieser Code THREAD sein? Die Dokumentation zu msdn besagt, dass alle statischen Member vom Typ ServicePointManager threadsafe sind, aber ich wollte nur bestätigen. http://msdn.microsoft.com/en-us/library/zkfa48de%28v=vs.80%29.aspx
- Der Code im finally-Block, ist das der richtige Weg, um es auf den Standardwert zurückzusetzen?
, dies wird nicht "thread-safe". Der Rückruf kann jederzeit von einem anderen Thread geändert werden. –
BTW, "Thread sicher" in Bezug auf statische Mitglieder bedeutet einfach, dass diese Mitglieder atomischen statischen Zustand (falls vorhanden) ändern. Zwei Threads, die 'ServerCertificateValidationCallback' modifizieren, sind in dieser Hinsicht" threadsicher ". Aus Sicht der Anwendung ist dies jedoch nicht threadsicher, da die Daten eines Threads (* sein * 'ServerCertificateValidationCallback'-Wert) von einem anderen Thread überschrieben werden können - was möglicherweise zu Fehlfunktionen des Codes in Ihrem Thread führt. Es gibt keine Möglichkeit, den Zugriff auf "ServerCertificateValidationCallback" in Threads zu synchronisieren, für die Sie keine Kontrolle haben. –
Danke Peter für deine Antwort. Ich sehe viele Beiträge, in denen sie diese Technik vorgeschlagen haben, aber anscheinend funktioniert es nicht. Ich bin mir nicht sicher, wie SSL-Zertifikatfehler für interne Webanforderungen am besten ignoriert werden. – user1689030