2017-12-29 7 views
1

로컬 네트워크 컴퓨터에 onpremise 웹 서비스 (asp.net core mvc)가 배포되었습니다. 우리는 Azure에 배포 된 App Service를 사용하여 이러한 WEB API를 호출하려고합니다. 그러나 "HTTP"프로토콜을 사용하여 연결하려고 할 때 작업이 취소되었습니다 (). 작업이 취소되었습니다 (). "HTTPS"의 경우 "보안 오류가 발생했습니다. 오류"이 표시됩니다.하이브리드 연결 관리자를 사용하여 HttpClient를 사용하여 onpremise WEB API를 호출하는 Azure 웹 응용 서비스

Azure App Service에서 하이브리드 연결을 생성하여 80 및 443 포트 모두에 온라인으로 표시되는 onpremise 웹 API 서비스에 연결했습니다. 로컬 네트워크 컴퓨터에도 하이브리드 연결 관리자를 설치했습니다.

다음은 코드 위

try 
{ 
    var httpClient = new HttpClient(); 
    httpClient.Timeout = TimeSpan.FromMinutes(60); 
    httpClient.BaseAddress = new Uri("https://onpremise"); 
    httpClient.DefaultRequestHeaders.Accept.Clear(); 
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 
    //Simple Get Request to test on-premise service 
    var response = await httpClient.GetStringAsync("api/OnPremiseData/GetData"); 
    ViewBag.ResponseText = response; 
} 

내가 로컬 호스트에서 응용 프로그램을 디버깅 할 경우 잘 작동 (예를 들어, https://xyz.azurewebsite.com) 푸른 앱 서비스에 배포 된 코드를 호출하는 코드이다. 따라서 내가 생각하는 코드에는 아무런 문제가 없습니다. 다음은

웹 API를 코드입니다 : 아래

[Route("api/[controller]/[action]")] 
public class OnPremiseDataController : Controller 
{   
    [HttpGet] 
    public string GetData() 
    { 
    return "Success"; 
    } 
} 

및 startup.cs 파일입니다

우리가 사용하는 유사한 시나리오 (웹 애플리케이션 및 온 - 프레미스 SQL) 및 트릭이었다 있었다
public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddCors(); 
    services.AddMvc();    
} 
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    app.UseCors(options => options.WithOrigins("https://xyz.azurewebsite.com", "https://localhost:44310").AllowAnyMethod().AllowAnyHeader()); 
    if (env.IsDevelopment()) 
    { 
    app.UseDeveloperExceptionPage(); 
    }    
    app.UseMvc();     
} 

답변

1

위의 질문에 대한 해결책은 다음과 같습니다. 기본적으로 나는 2 문제를 해결했다.

처음에는 FQDN (정규화 된 도메인 이름)을 사용합니다. 온 - 프레미스 서비스에 연결할 수 있습니다. Azure에서 하이브리드 연결로 끝점을 구성하는 동안 FQDN을 사용하고 있는지 확인하십시오.

둘째, 코드의 라인 아래에 사용 나는 안전한 HTTPS 오티 온 - 프레미스 서버를 요청 할 수 있어요 :

HttpMessageHandler handler = new HttpClientHandler 
        { 
         SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls, 
         ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true 
        }; 
var httpClient = new HttpClient(handler); 
    httpClient.Timeout = TimeSpan.FromMinutes(60); 
     httpClient.BaseAddress = new Uri("https://onpremise"); 
     httpClient.DefaultRequestHeaders.Accept.Clear(); 
     httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     //Simple Get Request to test on-premise service 
     var response = await httpClient.GetStringAsync("api/OnPremiseData/GetData"); 
     ViewBag.ResponseText = response; 
1

온 - 프레미스 시스템의 하이브리드 연결 관리자에서 끝점의 정규화 된 도메인 이름

+0

나는 내가 생각 :

다음
HttpMessageHandler handler = new HttpClientHandler { SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls, ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true }; 

는 위의 문제의 완벽한 솔루션입니다 끝점을 언급함으로써 SQL Server에 연결할 수 있습니다. 예 : tcp : 연결 문자열의 호스트 이름 만 1433입니다. 비슷한 생각으로 나머지 API를 연결하는 방법에 대한 아이디어가 있습니까? 나는 완전한 이름을 사용하여 시험해 볼 필요가있다. 희망이 작동합니다. –

+0

우리의 연결은 성공적 이었지만 엔드 포인트가 FQDN이 될 때까지 요청이 이루어지지 않았습니다. –

+0

예. FQDN이 나를 위해 작동합니다! HTTPS가 아닌 HTTP 전용입니다. HTTPS를 사용할 때 "보안 오류가 발생했습니다"라는 메시지가 나타납니다. –

관련 문제