1
votes

I'm using the following code to connect. I can connect to other Azure Resources ok.

But for one resource I get the following error: URL and Key are correct.

{"A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond"}

The Code is as follows

 _searchClient = new SearchServiceClient(searchServiceName, new 
  SearchCredentials(apiKey));
    _httpClient.DefaultRequestHeaders.Add("api-key", apiKey);
    _searchServiceEndpoint = String.Format("https://{0}.{1}", 
  searchServiceName, _searchClient.SearchDnsSuffix);

    bool result = RunAsync().GetAwaiter().GetResult();

Any ideas? thx in advance? How can I troubleshoot this?

1
Can you share the complete code?Gaurav Mantri

1 Answers

2
votes
  1. I will show how this is done in c#
  2. you will need a appsettings.json
  3. you will need this code in the program.cs file
  4. there are a lot of other files in the example from the document that you may need to use , learn and edit for ur usecase

When working in c# and azure, always know what is unique about the file structured your solution first. This is why we build the examples from the docs as we learn the solution. Next we must study the different blocks of code that when executed deliver one feature or functionality to the solution as a whole.

appsettings.json

{
 "SearchServiceName": "[Put your search service name here]",
 "SearchIndexName": "hotels",
 "SearchServiceAdminApiKey": "[Put your primary or secondary Admin API key here]",
 "SearchServiceQueryApiKey": "[Put your primary or secondary Query API key here]"
}

Program.cs

   namespace AzureSearch.SDKHowTo
{
    using System;
    using System.Linq;
    using System.Threading;
    using Microsoft.Azure.Search;
    using Microsoft.Azure.Search.Models;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Spatial;
     // This sample shows how to delete, create, upload documents and query an index
    static void Main(string[] args)
    {
        IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
        IConfigurationRoot configuration = builder.Build();

        SearchServiceClient serviceClient = CreateSearchServiceClient(configuration);

        string indexName = configuration["SearchIndexName"];

        Console.WriteLine("{0}", "Deleting index...\n");
        DeleteIndexIfExists(indexName, serviceClient);

        Console.WriteLine("{0}", "Creating index...\n");
        CreateIndex(indexName, serviceClient);

        ISearchIndexClient indexClient = serviceClient.Indexes.GetClient(indexName);

        Console.WriteLine("{0}", "Uploading documents...\n");
        UploadDocuments(indexClient);

        ISearchIndexClient indexClientForQueries = CreateSearchIndexClient(indexName, configuration);

        RunQueries(indexClientForQueries);

        Console.WriteLine("{0}", "Complete.  Press any key to end application...\n");
        Console.ReadKey();
    }
 private static SearchServiceClient CreateSearchServiceClient(IConfigurationRoot configuration)
    {
        string searchServiceName = configuration["SearchServiceName"];
        string adminApiKey = configuration["SearchServiceAdminApiKey"];

        SearchServiceClient serviceClient = new SearchServiceClient(searchServiceName, new SearchCredentials(adminApiKey));
        return serviceClient;
    }

    private static SearchIndexClient CreateSearchIndexClient(string indexName, IConfigurationRoot configuration)
    {
        string searchServiceName = configuration["SearchServiceName"];
        string queryApiKey = configuration["SearchServiceQueryApiKey"];

        SearchIndexClient indexClient = new SearchIndexClient(searchServiceName, indexName, new SearchCredentials(queryApiKey));
        return indexClient;
    }

    private static void DeleteIndexIfExists(string indexName, SearchServiceClient serviceClient)
    {
        if (serviceClient.Indexes.Exists(indexName))
        {
            serviceClient.Indexes.Delete(indexName);
        }
    }

    private static void CreateIndex(string indexName, SearchServiceClient serviceClient)
    {
        var definition = new Index()
        {
            Name = indexName,
            Fields = FieldBuilder.BuildForType<Hotel>()
        };

        serviceClient.Indexes.Create(definition);
    }}

Azure concepts to learn

  • How and why we create azure clients
  • Why do we use appsettings.json
  • What is some example file structures for azure search solutions
  • What coding lanague do you want to use to build that solutio
  • do u want to use the azure sdk
  • How to find and create api keys

C# concepts to learn

  • What is an interface and how do you use it
  • How to import one file in the file structure into another
  • How the main function works
  • How to call variables in to a function
  • How to call a function with a function
  • How to write server side code vs client side code
  • How to deploy c# code to azure

  • What version of c# are u using What’s is asp.net and what version will u use

  • What is asp.net core and what version will u use

As u can see azure and c# have a high learning curve.

Luckily you have stack overflow and documentation to research all of the above questions and more:)

For how u would troubleshoot...what I do is research each block of code in the documentation example and run all of the code locally. Then I test each block of code one at a time. Ur always testing data flowing thought the block of code. So you can just console log the result of a block a code by creating a test varable and print that varable to the console.

Because each block of Code represents one feature or functionality, each test will output either a pass or fail delivery of that feature or functionality. Thus you can design functionality, implement that design and create a test for new Feature.