Aufruf mehrerer Webservices mit unterschiedlichen Zertifikatstypen in einer Multithread-Umgebung

9

Mein Problem:

Ich habe eine Webapp (.NET 4.5.1), die mehrere Aufrufe an externe Webservices ausführt. Einige der Dienste kommunizieren nur über SSL und andere nur über TSL.

Ich weiß, dass ServicePointManager.SecurityProtocol aus irgendeinem Grund statisch global für das appdomin gesetzt werden kann (Warum global ich keine Ahnung habe), aber da mehrere Aufrufe gleichzeitig bei verschiedenen externen Diensten in verschiedenen Threads auftreten können - Ich kann nicht einfach das SecurityProtcol für die appdomain für jeden Serviceanruf ändern.

Frage:

Wie soll ich das in einer Multithread-Web-App-Umgebung handhaben? Soll ich Serviceanrufe in verschiedenen Appdomains erstellen, in denen ich SecurityProtocol einstellen kann? Und wenn ja - wie soll ich das machen?

    
Mattias Högnäs 14.11.2014, 11:03
quelle

3 Antworten

1

Ich hatte dieses Problem und fand diese Lösung, die für mich funktionierte.

Ich benutze einfach ServicePointManager , um Verbindungszertifikate zu behandeln

%Vor%

Um mit verschiedenen Anfragen umzugehen, hatte ich einen Wörterbuch-Mapping-Server mit URLs für eine Aufgabe. Jede Aufgabe läuft asynchron, was bedeutet, dass ich nicht direkt mit Threads umgehen muss und in jedem System habe ich schließlich System.Net-Objekte verwendet. Nämlich, HttpWebRequest , FtpWebRequest und SmtpWebRequest . Jeder von ihnen hat eine Eigenschaft zum Aktivieren / Deaktivieren der SSL-Verbindung, aber alle haben mit der gleichen Methode gearbeitet, um Zertifikate zu validieren.

    
Jefry Sastre 20.01.2015 17:10
quelle
0

Von Microsoft:

  

public static SecurityProtocolType Sicherheitsprotokoll {get; einstellen; }

     

Diese Eigenschaft wählt die Version der SSL-Sicherheit (Secure Sockets Layer) oder der Transportschichtsicherheit aus   (TLS) -Protokoll für neue Verbindungen, die das Secure Hypertext Transfer Protocol (HTTPS) & gt; nur Schema; bestehende Verbindungen werden nicht geändert.

Bitte beachten Sie: "Für neue Verbindungen verwenden ... bestehende Verbindungen werden nicht geändert"

Aktualisieren Sie diese Eigenschaft also kurz vor dem Öffnen einer neuen Verbindung.

    
okarpov 08.12.2014 16:24
quelle
0

Wie viele externe Dienste nutzt Ihre App? Können Sie ServicePoints nicht vorher (beim Start der App) erstellen und nur bei Bedarf erneut verwenden?

    
DanielS 25.12.2014 18:01
quelle