HTTP-триггер C # приложения-функции Azure, подключенный к базе данных Azure

Я пытаюсь создать бессерверный бэкэнд для мобильного приложения, следуя этому образцу (приветствует Джеймс): https://blog.xamarin.com/creating-a-serverless-backend-for-mobile-apps/

У меня все работает нормально, пока я не захочу подключить свой скрипт к базе данных.

Я хотел бы использовать это приложение-функцию Azure с базой данных Azure. Например, я хочу, чтобы мое мобильное приложение вызывало HTTP-запрос (который запускает приложение-функцию), приложение-функция выполняет запрос к базе данных, а затем отправляет HTTP-запрос обратно на мобильный телефон. Я пытался следить за этим видео: https://channel9.msdn.com/Series/Windows-Azure-Web-Sites-Tutorials/Create-an-event-processing-Azure-Function?ocid=player В этом видео , разработчик подключает свои сценарии к базе данных и выполняет запрос к базе данных.

Это тот шаг, который заставляет меня терпеть неудачу :(

Вот мой код:

#r "System.Configuration"
#r "System.Data"

using System.Net;
using System.Configuration;
using System.Data.Sql;
using System.Threading.Tasks;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    if (req == null)
        log.Info("req is null");
    else
        log.Info("req is not null");

    //log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");

    string sConnexionString = "Name=MS_TableConnectionString";

    log.Info(sConnexionString);

    if (ConfigurationManager.ConnectionStrings[sConnexionString] == null)
        log.Info("ConfigurationManager.ConnectionStrings[sConnexionString] is null");
    else
        log.Info("ConfigurationManager.ConnectionStrings[sConnexionString] is not null");

        var str = ConfigurationManager.ConnectionStrings[sConnexionString].ConnectionString;

    if (str == null)
        log.Info("str is null");
    else
        log.Info("str is not null");

    using (SqlConnection conn = new SqlConnection(str))
    {
    if (conn == null)
        log.Info("conn is null");
    else
        log.Info("conn is not null");

        conn.Open();
        var text = "INSERT INTO MyEasyTable(id) values (1)";
        using (SqlCommand cmd = new SqlCommand(text, conn))
        {
            var rows = await cmd.ExecuteNonQueryAsync();
            log.Info($"{rows} inserted.");
        }
    }


    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    name = name ?? data?.name;

    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}

А вот журнал вывода:

2016-10-24T13:19:09.452 Compilation succeeded.
2016-10-24T13:19:13.257 Function started (Id=6ffaade4-58b0-4005-8fe7-7dc06b96c2b7)
2016-10-24T13:19:14.018 req is not null
2016-10-24T13:19:14.018 Name=MS_TableConnectionString
2016-10-24T13:19:14.018 ConfigurationManager.ConnectionStrings[sConnexionString] is null
2016-10-24T13:19:14.018 Function completed (Failure, Id=6ffaade4-58b0-4005-8fe7-7dc06b96c2b7)
2016-10-24T13:19:14.037 Exception while executing function: Functions.HttpTriggerCSharp1. HttpTriggerCSharp1: Object reference not set to an instance of an object.

Благодаря этому журналу я понимаю, что ConfigurationManager не может подключиться к моей базе данных Azure :(

Я пробовал много строк для sConnexionString:

  • "Источник данных = tcp: BDDSERVERNAME.database.windows.net, 1433; Исходный каталог = BDD_NAME; ID пользователя = USER @ BDDSERVERNAME; Пароль = MYPASSWORD"

  • "MS_TableConnectionString"

  • "Name = MS_TableConnectionString"

И никогда не работает :(

Пожалуйста, у кого-нибудь есть идея?


person Maxime Esprit    schedule 24.10.2016    source источник


Ответы (1)


Хорошо, я нашел ответ ...

Мне нужно перейти к настройкам приложения-функции и добавить строку подключения в настройки, как указано здесь: Строка подключения к базе данных Функций Azure

Затем мне нужно использовать эту строку кода:

string sConnexionString = "MS_TableConnectionString";

И это хорошо работает!

Спасибо Адриану Холлу, который позволил мне уточнить поиск

person Maxime Esprit    schedule 24.10.2016
comment
Максим, не могли бы вы отметить это как ответ, когда у вас будет возможность? Это поможет другим решить подобные проблемы. Спасибо! - person Fabio Cavalcante; 25.10.2016