2016-05-19 43 views
6

Il codice riportato di seguito funziona correttamente su localhost ma viene visualizzato l'errore sopra riportato dopo l'implementazione della mia API su microsoft azure.Azure api La richiesta è stata interrotta: Impossibile creare il canale protetto SSL/TLS. client http Durante la chiamata ad alcuni web API

Il mio codice è il seguente:

public class UsersController : Controller 
{ 
    private readonly HttpClient _client; 

    public UsersController() 
    { 
     ServicePointManager.Expect100Continue = true; 
     ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; 
     _client = new HttpClient { BaseAddress = new Uri("https://pincode.saratchandra.in/api") }; 
     _client.DefaultRequestHeaders.Accept.Clear(); 
     _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    } 

public JsonResult GetAddress(int pincode) 
{ 
    var response  =_client.GetAsync("/pincode/125112").Result; 

    //Here it throws an exception: got no response 
    if (response.IsSuccessStatusCode) 
    { 
    } 

    return Json(ApiResult.Success(), JsonRequestBehavior.AllowGet); 
} 

Non abbiamo avuto alcuna risposta per le chiamate al di sopra solo ottenere l'errore

La richiesta è stata interrotta: Impossibile creare SSL/TLS canale protetto

+0

hai trovato una correzione per questo? Sperimentare lo stesso problema. –

+0

No non sono stato in grado di trovare una soluzione per questo. – jitender

+0

Si sta utilizzando Servizi app di Azure o Servizi cloud di Azure per la propria API? – TwistedStem

risposta

0

Recentemente abbiamo avuto un numero di problemi simili con le API.

Nel nostro caso questi sono stati risolti modificando il tipo di protocollo di sicurezza per TLS 1.2, in questo modo:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

Questo sembra essere un risultato della deprecazione di SSL, e la raccomandazione dell'adozione di TLS 1.2 dal PCI a partire dalla metà del 2016. Vedi here per più

EDIT:

Questo funziona per me:

class Program 
    { 
     private static HttpClient _client; 
     static void Main(string[] args) 
     { 
      ServicePointManager.Expect100Continue = true; 
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; 
      _client = new HttpClient(); 
      _client.DefaultRequestHeaders.Accept.Clear(); 
      _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      var response = _client.GetAsync("https://pincode.saratchandra.in/api/pincode/125112").Result; 
     } 
    } 
+0

ho già provato tutte le opzioni per SecurityProtocol nessuno di loro non funziona per me -;) – jitender

+0

vedere il mio EDIT, con una soluzione funzionante –

+0

Anche per me funziona bene su server locale e server Windows ma su azzurro non funziona – jitender

0

Abbiamo risolvere lo stesso problema solo oggi, e tutto quello che dovete fare è quello di aumentare la versione runtime di .NET

4.5.2 non ha funzionato per noi con il problema di cui sopra, mentre 4.6.1 era OK

<httpRuntime targetFramework="4.6.1"/> 

Se è necessario mantenere la versione .NET, quindi impostare

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;