2016-05-19 35 views
6

Poniższy kod działa dobrze na localhost, ale uzyskanie powyższego błędu po wdrożeniu mojej api na microsoft lazur.Azure api Żądanie zostało przerwane: nie można utworzyć bezpiecznego kanału SSL/TLS. http klient Podczas wywoływania niektórych api web api

Mój kod wygląda następująco:

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); 
} 

Nie dostaliśmy żadnej odpowiedzi na powyższej rozmowy po prostu błąd

Żądanie zostało przerwane: nie można utworzyć SSL/TLS bezpiecznego kanału

+0

Znalazłeś rozwiązanie tego? Występuje ten sam problem. –

+0

Nie, nie mogłem znaleźć poprawki. – jitender

+0

Czy korzystasz z usług aplikacji Azure lub usług Cloud Azure dla swojego interfejsu API? – TwistedStem

Odpowiedz

0

Niedawno mieliśmy kilka podobnych problemów z API.

w naszym przypadku te zostały rozwiązane przez zmianę typ protokołu zabezpieczeń TLS 1.2, tak:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

To wydaje się być wynikiem zaniechania SSL, a zalecenie przyjęcia TLS 1.2 przez PCI, tak jak od połowy 2016. Zobacz here dłużej

EDIT:

działa to dla mnie:

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

Próbowałem już wszystkich opcji dla SecurityProtocol, żaden z nich nie działa dla mnie -;) – jitender

+0

zobacz moją EDYTĘ, z działającym rozwiązaniem –

+0

Dla mnie też działa dobrze na serwerze lokalnym i serwerze Windows, ale na błękitnym nie działa – jitender

0

Zostaliśmy rozwiązywania tego samego problemu właśnie dzisiaj, i wszystko, co trzeba zrobić, to zwiększyć wersji runtime .NET

4.5.2 nie działa dla nas z powyższego problemu, natomiast 4.6.1 było OK

<httpRuntime targetFramework="4.6.1"/> 

Jeśli trzeba zachować wersję .NET, a następnie ustawić

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