Как настроить гибридные соединения Azure Relay с помощью C # для подключения к локальному SQL Server? - PullRequest
0 голосов
/ 17 марта 2019

Я попытался протестировать предоставленный пример здесь , чтобы использовать гибридное соединение Azure для подключения к локальному SQL Server. На моем сервере установлен «Диспетчер гибридных подключений», и я могу подключиться к базе данных через план обслуживания приложений Azure и функцию Azure.

Однако я бы хотел использовать то же гибридное соединение с другой машины, находящейся в другой сети с использованием кода C #. Хотя в этом примере я поместил правильную строку подключения в программу «PortBridgeClientAgent», приложение не может подключиться к локальному серверу SQL. Как правильно установить подключения такого рода вне Azure?

Это мой код:

using Microsoft.Azure.Relay;
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace TestConsoleApp
{
    public static class Program
    {
        private const string RelayNamespace = "{NameSpace}.servicebus.windows.net";
        private const string ConnectionName = "{ConnectionName}";
        private const string KeyName = "RootManageSharedAccessKey";
        private const string Key = "{Key}";

        public static void Main() => RunAsync().GetAwaiter().GetResult();

        private static async Task RunAsync()
        {
            var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(KeyName, Key);

            var client = new HybridConnectionClient(new Uri($"sb://{RelayNamespace}/{ConnectionName}"), tokenProvider);
            var hybridConnectionStream = await client.CreateConnectionAsync();

            var connectionStringBuilder = new SqlConnectionStringBuilder
            {
                DataSource = "{SqlServerHostName},1433",
                InitialCatalog = "{DatabaseName}",
                IntegratedSecurity = false,
                UserID = "{SqlLogin}",
                Password = "{Password}",
            };

            try
            {
                using (var connection = new SqlConnection(connectionStringBuilder.ToString()))
                {
                    connection.Open();

                    var command1 = new SqlCommand("Query", connection);
                    using (var dataReader = await command1.ExecuteReaderAsync())
                    {
                        var result = dataReader;
                    }
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.ToString());
            }

            Console.ReadLine();
            await hybridConnectionStream.CloseAsync(CancellationToken.None);
        }
    }
}

1 Ответ

2 голосов
/ 18 марта 2019

Вы можете узнать, почему это не работает в этом вопросе: Подключение к гибридному соединению, обслуживаемому диспетчером гибридного соединения

В службах приложений происходит нечто большее, чем просто подключение к служебной шине и запрос соединения SQL. Это означает, что в настоящее время невозможно использовать это для создания подключения внешних служб приложений к вашим локальным серверам.

...