Невозможно подключиться к службам аналитики Azure через приложение-функцию Azure. Не удалось загрузить тип 'System.Security.Principal.WindowsImpersonationContext' - PullRequest
0 голосов
/ 12 ноября 2018

Следуя этому руководству, я создал приложение-функцию Azure, которое компилируется и запускается:

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

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

// req is a value passed from function.json which is currently ignored
public static void Run(String req, ILogger log)
{
    log.LogInformation($"C# Timer trigger function started at: {DateTime.Now}");

    try
            {
                Microsoft.AnalysisServices.Tabular.Server asSrv = new Microsoft.AnalysisServices.Tabular.Server();

                // Pulls the connection string from the Connection Strings collection within the Application Settings
                //var connStr = ConfigurationManager.ConnectionStrings["AASDev"].ConnectionString;

                // Pulls the connection string from an Environment Variable held within the Application Settings collection
                //var connStr = GetEnvironmentVariable("Conn");

                // Simply hard coding the connection string (Anonymised)
                var connStr = @"Data Source=asazure://<roll out>.asazure.windows.net/<My AAS Instance>;Initial Catalog=<My AAS Database>;User ID=<My User>;Password=<My Pass>";

                asSrv.Connect(connStr);
                Database db = asSrv.Databases["<My AAS Database>"];
                Model m = db.Model;
                m.Tables["<My AAS Table>"].RequestRefresh(RefreshType.Full);     // Mark only one table for refresh
                db.Model.SaveChanges();     //commit  which will execute the refresh
                asSrv.Disconnect();
            }
            catch (Exception e)
            {
                log.LogInformation($"C# Timer trigger function exception: {e.ToString()}");
            }
    log.LogInformation($"C# Timer trigger function finished at: {DateTime.Now}"); 
}

Однако при запуске функции возникает исключение при попытке подключения к объекту сервера, содержащемуся в переменной asSrv:

2018-11-12T13:45:40.273 [Information] 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=<removed>'.  
    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)

Строка подключения имеет User ID и Password, установленные в соответствии с примером, и независимо от того, как я пытаюсь отформатировать или получить эту строку подключения, она либо выдает вышеуказанную ошибку, либо жалуется, что нет пользователя или пароля, если опущено.

Что мне здесь не хватает?


Изменить для среды выполнения ~ 1:

В настоящее время получено много экземпляров следующего сообщения об ошибке:

2018-11-13T10:02:42.817 [Warning] Unable to find assembly 'Microsoft.VisualStudio, PublicKeyToken=xxx'. Are you missing a private assembly file?
2018-11-13T10:02:42.817 [Warning] Exception during runtime resolution of assembly 'Microsoft.VisualStudio, PublicKeyToken=xxx': 'System.ArgumentException: The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))

   at System.AppDomain.nApplyPolicy(AssemblyName an)

   at Microsoft.Azure.WebJobs.Script.Description.FunctionAssemblyLoader.ResolveAssemblyCore(Object sender, ResolveEventArgs args) in C:\projects\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\FunctionAssemblyLoader.cs:line 88'
2018-11-13T10:02:42.817 [Warning] Unable to find assembly 'Microsoft.VisualStudio, PublicKeyToken=xxx'. Are you missing a private assembly file?
2018-11-13T10:02:43.676 [Warning] Unable to find assembly 'Microsoft.AnalysisServices.Tabular.resources, Version=15.0.0.0, Culture=en-US, PublicKeyToken=xxx'. Are you missing a private assembly file?
2018-11-13T10:02:43.676 [Warning] Unable to find assembly 'Microsoft.AnalysisServices.Tabular.resources, Version=15.0.0.0, Culture=en, PublicKeyToken=xxx'. Are you missing a private assembly file?

1 Ответ

0 голосов
/ 13 ноября 2018

Учебное пособие предназначено для функции во время выполнения ~ 1, предназначенной для .Net Framework. В то время как сейчас приложение Function работает по умолчанию .Net Core ~ ​​2 по умолчанию.

Перейдите на Портал, Функции платформы> Настройки приложения, в разделе Настройки приложения установите FUNCTIONS_EXTENSION_VERSION на ~ 1. Обратите внимание, что все функции, созданные ранее, будут затронуты.

Обновление

Без поддержки .Net Core SDK мы, вероятно, не сможем заставить его работать во время выполнения Funtion 2.x. И эти предупреждения о пропущенных сборках во время выполнения ~ 1 должны быть безвредными.

Если вы столкнулись с ошибкой On-Premise Gateway is required to access the data source. Please install a unified gateway for the server, следуйте этому руководству для установки.

...