In this post, let's see how we can set up a Hybrid Connection for an
Azure App Service. In simple Hybrid Connection for an Azure App Service allows
your App Service to access a service that is not exposed to the
internet.
Better to go by an example, let's say you have an API running in your local
machine and you need to consume this API from an Azure-hosted App Service.
I have created a very simple ASP.NET Core Web API application, something like
below.
using Microsoft.AspNetCore.Mvc;
namespace SampleApi.Controllers
{
[ApiController]
[Route("[controller]")]
public class HelloController : ControllerBase
{
[HttpGet]
public ActionResult<string> Get()
{
return Ok("Hello from localhost.");
}
}
}
And this is running locally at https://localhost:44350 and I can
invoke like this. https://localhost:44350/hello. I have another
ASP.NET Core Web API application that will consume this API.
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace AppServiceWithHybridConnection.Controllers
{
[ApiController]
[Route("[controller]")]
public class ValuesController : ControllerBase
{
[HttpGet]
public async Task<ActionResult<string>> Get()
{
using var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
using var httpClient = new HttpClient(httpClientHandler);
HttpResponseMessage httpResponseMessage = await httpClient.GetAsync("https://localhost:44350/hello");
string message = await httpResponseMessage.Content.ReadAsStringAsync();
return Ok($"Message: {message}");
}
}
}
So if I run both these applications locally, of course, it will work.
|
Running locally |
Now, I have created an Azure App Service with below configurations.
|
Create Azure Windows App Service
|
Note: I have created it as Azure Windows App Service. As of today (2nd May, 2020) I am writing this post, Hybrid Connections are only available in
Windows.
Now, I have deployed the consumer API to this service, exact same code, and
now if I go to
https://app-hybridconnection-demo.azurewebsites.net/values, of course, it's not going to work. There is no publicly available
endpoint
https://localhost:44350/hello which this API is
calling.
|
Cannot connect to localhost
|
Now comes the interesting part. Now let's set up a Hybrid Connection, so the
Azure-hosted app service has access to our locally running API.
First, from inside our Windows App Service, I am going to
Networking.
|
Networking |
Now I am clicking on Configure your hybrid connection endpoints.
|
Configure your hybrid connection endpoints
|
From the next screen, there are 2 options.
- Add hybrid connection
- Download connection manager
|
Hybrid Connections
|
I have clicked on
Add hybrid connection and from the next
page, I am clicking on
Create new hybrid connection.
|
Create new hybrid connection
|
Here I am configuring the connection. The important thing here is providing
the Endpoint Host and Endpoint Port. I have given the local
API information.
|
Create new hybrid connection
|
Now I am clicking on Create. Once is created, it will be displayed.
|
Hybrid Connection Created
|
When you click on the hybrid connection, you can see the properties and copy
the
GATEWAY CONNECTION STRING.
All good up to this point. Now let's
Download connection manager and
install. It's a very straightforward installation and don't think no
screenshots/explanation is necessary. Once installed, find and open
Hybrid Connection Manager UI.
|
Hybrid Connection Manager UI
|
Here, you can either click on
Add a new Hybrid Connection or
Enter Manually. Add a new option will take you through the Azure
Sign-In process which can be a pain, I prefer to use the manual process.
|
Add Hybrid Connection From Connection String
|
From here, I am pasting the connection string I have copied and clicked on
Add.
|
Hybrid Connection Is Connected
|
You can see it's now connected.
Note: In case you are getting Not Connected, try restarting
HybridConnectionManager Service.
|
HybridConnectionManager |
Now I am going back to my Azure-hosted API endpoint and just refreshing the
browser.
|
App Service Consumes From Locallhost
|
It's working and our Azure-hosted API is consuming the locally running API.
Isn't this great?
Learn more,
Azure App Service Hybrid Connections
Happy Coding.
Regards,
No comments:
Post a Comment