In this post, let's see how we can expose an Azure Document Intelligence (DI) Service through Azure Front Door (AFD) and consume it via a .NET Client Application that uses Azure.AI.DocumentIntelligence package.
Say, we have a DI service,
https://{document-intelligence-service-name}.cognitiveservices.azure.com/
And we need this service to be consumed via,
https://{front-door-name}.azurefd.net/di-api/
For an example,
POST https://{document-intelligence-service-name}.cognitiveservices.azure.com/documentintelligence/documentClassifiers/{modelId}:analyze
will now be consumed via,
POST https://{front-door-name}/di-api/documentintelligence/documentClassifiers/{modelId}:analyze
To start off, following are already created.
- An Azure Document Intelligence Service
- Azure Front Door and CDN profiles (Azure Front Door Standard with Quick Create)
First step is adding Origin Group with Origins in AFD.
|
Add Origin Group |
|
Add Origin |
Once these are added, next we need to configure how to route the requests to
this Origin group.
We can do it two ways.
1. Using default-route, with a Rule set
to Override origin group
2. Creating a new route with Pattens to match and Origin path
Now let's see how we can configure both these ways.
1. Using default-route, with a Rule set to Override origin group
With this approach, first we need to create a Rule set as follows.
2. Creating a new route with Pattens to match and Origin path
In this approach, we don't need to create a Rule set. Instead, we can create a new Route with Pattens to match and Origin path.
Now I have a .NET Client Application that uses Azure.AI.DocumentIntelligence package, that I was using to test the DI functionality via AFD.
using Azure;
using Azure.AI.DocumentIntelligence;
string endpoint = "https://{front-door-name}.azurefd.net/di-api/";
string apiKey = "{document-intelligence-service-api-key}";
DocumentIntelligenceClient documentIntelligenceClient = new (new Uri(endpoint), new AzureKeyCredential(apiKey));
string classifierId = "{some-classification-model-id}";
string testFilePath = "path\to\test\file.pdf";
using FileStream fileStream = new FileStream(testFilePath, FileMode.Open, FileAccess.Read);
BinaryData binaryData = BinaryData.FromStream(fileStream);
ClassifyDocumentOptions classifyDocumentOptions = new(classifierId, binaryData);
Operation<AnalyzeResult> operation =
await documentIntelligenceClient.ClassifyDocumentAsync(WaitUntil.Completed, classifyDocumentOptions);
AnalyzeResult result = operation.Value;
foreach (AnalyzedDocument document in result.Documents)
{
Console.WriteLine($"Found a document of type: '{document.DocumentType}'");
}
And I can see this is working with both the approaches.
Hope this helps.
Happy Coding.
Regards,
Jaliya
No comments:
Post a Comment