Публикация в Azure через Kudu ZipDeploy с использованием powershell вызывает 401, когда я пытаюсь получить доступ к API позже - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть проект ASP.Net Core 2.1.4, и я могу развернуть его из Visual Studio 2017 15.5.7 с помощью пункта меню «Публикация» и типа «Развернуть в Azure». Это работало просто отлично.

Я работаю над попыткой развертывания этого проекта с использованием сервера Bamboo Build / Deployment, и я получил свой скрипт powershell для загрузки опубликованных файлов в виде zip-файла на конечную точку REST Kudu Zipdeploy, и теперь я вижу развертывание в Куду список развертываний. Это было разработано в этом SO сообщении с помощью Дэвида Эббо.

Однако теперь, когда я пытаюсь получить доступ к API с помощью Postman после использования этого метода развертывания PowerSudu Kudu, я получаю статус неавторизованного 401.

Публикация точно такой же сборки с использованием метода меню публикации VS2017 позволяет мне получить прекрасный доступ к API, поэтому что-то не так в моей публикации Kudu через развертывание Bamboo и Powershell.

Вот моя функция Powershell;

Function Upload-ZipDeploy() {

    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $PublishingUsername, $publishingPassword)))
    $userAgent = "powershell/1.0"
    if(!$SlotName) 
    {
        $apiUrl = "https://$WebAppName.scm.azurewebsites.net/api/zipdeploy"
    }
    else {
        $apiUrl = "https://$WebAppName-$SlotName.scm.azurewebsites.net/api/zipdeploy"
    }

    $filePath = $LocalPath
    Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method Post -InFile $filePath -ContentType "multipart/form-data"

}

Я прочитал сообщение на форуме MS, в котором говорится о конечной точке zip и получаю ошибку 401 после развертывания, где они решают ее, добавляя конечный / на URL развертывания. Я попробовал это с моим сценарием, но это не имело никакого значения.

Вот фрагмент из потока журнала, показывающий, что развертывание прошло успешно;

2018-04-27T13:34:37    Finished successfully.    
2018-04-27T13:34:37  Running post deployment command(s)...
2018-04-27T13:34:37  Deployment successful.
2018-04-27 13:34:37.160 +00:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request starting HTTP/1.1 POST http://127.0.0.1:13601/iisintegration  0
2018-04-27 13:34:37.177 +00:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request finished in 16.935ms 202 

Однако, когда я пытаюсь достичь одной из моих конечных точек API после этого развертывания Kudu, я получаю статус 401 Unauthorized.

При просмотре потока журнала для API в Azure я вижу следующее:

018-04-27 13:37:32.814 +00:00 [Critical] Microsoft.AspNetCore.Hosting.Internal.WebHost: Hosting startup assembly exception
System.InvalidOperationException: Startup assembly 
Microsoft.AspNetCore.AzureKeyVault.HostingStartup failed to execute. See the 
inner exception for more details. ---> System.IO.FileNotFoundException: 
Could not load file or assembly 
'Microsoft.AspNetCore.AzureKeyVault.HostingStartup, Culture=neutral, 
PublicKeyToken=null'. The system cannot find the file specified.
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String 
codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, 
StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean 
 throwOnFileNotFound, Boolean forIntrospection, Boolean 
suppressSecurityChecks, IntPtr ptrLoadContextBinder)
   at 
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName 
assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, 
StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean 
throwOnFileNotFound, Boolean forIntrospection, IntPtr ptrLoadContextBinder)
   at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
   at 

Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices
(AggregateException& hostingStartupErrors)
   --- End of inner exception stack trace ---

В этот момент я застрял. Что мне здесь не хватает?

РЕДАКТИРОВАТЬ # 1 4/30/18

Я добавил расширения сайта в соответствии с предложением Дэвида Эббо. Я больше не получаю сообщение об ошибке «файл не найден» в потоке журнала Azure, но я все еще получаю ошибку 401 Несанкционированный, когда я пытаюсь получить доступ к своим конечным точкам API после развертывания с помощью Kupu ZipDeploy. Опять же, я не получаю эту ошибку, и все работает нормально, если я разверну, используя публикацию VS2017.

Вот мой скриншот расширений Azure на моем портале.

Расширения сайта портала Azure

РЕДАКТ. № 2 - 4/30/18

Хорошо, я считаю, что проблема конкретно связана с многоцелевыми структурами. Я удалил проекты из решения, которое требовало многоцелевой настройки, и теперь я могу развернуть их с помощью ZipDeploy в Bamboo, и я больше не получаю статус 401 Несанкционированный при доступе к конечным точкам. Я полагаю, что могу работать с этим параметром, поскольку проекты, для которых они были многоцелевыми, на самом деле не нужно развертывать в Azure, поскольку они были утилитами, связанными с БД, и я могу запускать их с локального сервера, предназначенного для базы данных Azure.

1 Ответ

0 голосов
/ 30 апреля 2018

Думаю, я знаю, в чем ваша проблема, и она не имеет прямого отношения к zipdeploy. В отличие от более ранних версий Core, 2.1 не установлен на ВМ (потому что это предварительный просмотр). Вместо этого вам нужно установить расширение сайта в ваше веб-приложение. Подробнее см. на этой странице (страница была написана для предварительного просмотра 1, но это же относится и к предварительному просмотру 2).

Я попробовал это сделать, используя чистое веб-приложение, новый Core 2.1 Preview 2 по умолчанию в VS и zip-развертывание. И все заработало нормально после установки расширения сайта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...