我有一个asp.net core 2.1.4项目,我可以在visual studio 2017 15.5.7中使用“发布”菜单项部署它,并部署到azure类型。这一切都很顺利。
我正在尝试使用一个bamboo构建/部署服务器部署这个项目,我已经获得了我的powershell脚本,将发布的文件以zip文件的形式上传到kudu zipdeploy rest端点,现在我可以在kudu部署列表中看到部署。这是在大卫艾博的帮助下,在这篇文章中解决的。
然而,现在,当我尝试在使用这个powershell kudu部署方法之后使用postman访问api时,我得到了一个401未授权状态。
使用vs2017 publish menu方法发布完全相同的版本可以让我很好地访问api,因此通过bamboo部署和powershell发布kudu仍然有一些不正确的地方。
这里是我的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"
}
我读了一篇微软论坛的帖子,里面提到了zip端点,在部署后出现了一个401错误,他们在部署url上添加了一个/trailing/来解决这个问题。我试着用我的剧本,但没有任何区别。
下面是日志流中的一个片段,显示部署成功;
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
然而,当我尝试在kudu部署之后访问我的api端点时,我得到了一个401未授权状态。
在azure中查看api的日志流时,我看到以下内容:;
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
我按照davidebbo的建议添加了站点扩展。我不再在azure日志流中获取“找不到文件”错误,但在使用kupu zipdeploy进行部署后尝试访问api端点时,仍然会收到401未经授权的错误。同样,如果我使用vs2017 publish部署,则不会出现此错误,并且一切正常。
这是我的门户网站上的azure扩展截图。
azure门户网站扩展
编辑#2-2018年4月30日
好的,我认为这个问题与多目标框架有关。我从解决方案中删除了需要多目标设置的项目,现在我可以使用bamboo中的zipdeploy进行部署,并且在访问端点时不再获得401未授权状态。我相信我可以使用这个选项,因为它们是多目标的项目实际上不需要部署到azure,因为它们是与db相关的实用程序,我可以从一个以azure数据库为目标的本地服务器上运行它们。
1条答案
按热度按时间r8uurelv1#
我想我可能知道你的问题是什么,这与zipdeploy没有直接关系。与旧的核心运行时不同,2.1没有安装在vm上(因为它是预览版)。相反,您需要在web应用程序中安装一个站点扩展。有关详细信息,请参阅此页(该页是为preview 1编写的,但preview 2的处理方式相同)。
我使用一个干净的web应用程序、vs中的默认new core 2.1 preview 2和zip deploy尝试了这一点。安装了站点扩展后,它运行良好。