Подключение к службам аналитики Azure в функции Azure - PullRequest
0 голосов
/ 23 января 2019

Я построил базу на нескольких примерах кода, сценарий C #, позволяющий обновить базу данных, размещенную на сервере SSAS, но я получаю код ошибки. Есть идеи, как исправить ошибку?

C # Исключение функции триггера таймера: System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта. при отправке № 0. Выполните (TimerInfo myTimer, журнал TraceWriter) в D: \ home \ site \ wwwroot \ TimerTrigger1 \ run.csx: строка 14

#r "Microsoft.AnalysisServices.Tabular.DLL"
#r "Microsoft.AnalysisServices.Core.DLL"
#r "System.Configuration"

using System;
using System.Configuration;
using Microsoft.AnalysisServices.Tabular;
using Microsoft.AnalysisServices.Core;


    public static void Run(TimerInfo myTimer,TraceWriter log) {
            try
            {
                Microsoft.AnalysisServices.Tabular.Server server = new Microsoft.AnalysisServices.Tabular.Server();
                var connStr = ConfigurationManager.ConnectionStrings["ConnectStringBIDEV01"].ConnectionString;
                server.Connect(connStr);
                server.Disconnect();
            }

            catch (Exception e)
            {
                log.Info($"C# Timer trigger function exception: {e.ToString()}");
            }

            log.Info($"C# Timer trigger function finished at: {DateTime.Now}"); 
        }

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Обе проблемы Could not load type и ConfigurationManager.ConnectionStrings get null являются результатом разницы Функция Runtime .

Функции v1 предназначены для Full .NET Framework, а v2 работает на .NET Core env. Возможно, вы создали функцию v2 (по умолчанию), в которой SDK служб Analysis Services (зависит от .NET Framework) не работает, а ConfigurationManager не поддерживается.

Таким образом, решение простое, удалите существующие функции и измените версию среды выполнения функций на ~ 1 (В портале, Функции платформы> Настройки приложения функций>) и создайте функцию v1.

После этого мы можем увидеть некоторые предупреждения о Unable to find assembly, просто проигнорируйте их, поскольку мы можем успешно подключиться к AnalysisServices. Если вы столкнулись с ошибкой On-Premise Gateway is required to access the data source. Please install a unified gateway for the server, следуйте этому руководству для установки.

0 голосов
/ 24 января 2019

Вы правы, кажется, строка подключения пуста.Поэтому я обновил его, добавив исходный каталог (моя строка подключения не содержит эту переменную).

Итак, чтобы обойти это, я заменил var connStr = ConfigurationManager.ConnectionStrings["ConnectStringBIDEV01"].ConnectionString;

на

var connStr = "Provider=MSOLAP;Data Source=asazure://northeurope.asazure.windows.net/xxxxxxxx;Initial Catalog=xxxxxxx;User ID=xxxxxx;Password=xxxxxx";

Теперь я получаю следующее сообщение ... Я подозреваю, что это прогресс, но как это исправить?

C# Timer trigger function exception: System.TypeLoadException: Could not load type 'System.Security.Principal.WindowsImpersonationContext' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
   at Microsoft.AnalysisServices.IdentityResolver.Dispose()
   at Microsoft.AnalysisServices.XmlaClient.Connect(ConnectionInfo connectionInfo, Boolean beginSession)
   at Microsoft.AnalysisServices.Core.Server.Connect(String connectionString, String sessionId, ObjectExpansion expansionType)
   at Submission#0.Run(TimerInfo myTimer, TraceWriter log) in D:\home\site\wwwroot\TimerTrigger1\run.csx:line 16
...