Serviço de aplicativo Web do Azure para chamar API WEB on-line usando HttpClient usando o gerenciador de conexões híbrido
Temos um serviço Web on-site (asp.net core mvc) implantado na máquina de rede local. Estamos tentando chamar essas APIs da Web usando o Serviço de Aplicativo implantado no Azure. Mas está dando erro de tempo limite ouTarefa cancelada erro no caso de tentarmos conectá-lo usando o protocolo "HTTP". No caso de "HTTPS" está dando "erro de segurança ocorreu erro"
Criamos a conexão híbrida no Serviço de Aplicativo do Azure para conectar-se ao serviço de API da Web on-site, que é exibido on-line nas portas 80 e 443. Também configuramos o Hybrid Connection Manager na máquina de rede local.
Abaixo está o snippet de código para chamar o código implantado no Serviço de Aplicativo do Azure (por exemplo,https://xyz.azurewebsite.com)
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;
}
O código acima funciona bem no caso de depurar o aplicativo do localhost. Portanto, não há problema com o código que assumo.
Abaixo está o snippet de código da API da web:
[Route("api/[controller]/[action]")]
public class OnPremiseDataController : Controller
{
[HttpGet]
public string GetData()
{
return "Success";
}
}
e abaixo está o arquivo startup.cs
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();
}