我正在尝试在Azure上运行带有.net core 2.0的Identityserver 4。 我的部署是在一个全新的服务计划中使用全新的应用程序服务完成的,使用bitbucket进行持续部署。
部署成功,但打开网址时,我看到了502.5错误。
我尝试使用kudu运行dotnet命令,但这只是在启动后立即停止而不返回错误。
我的解决方案不包含web.config,但生成如下。唯一的变化是我启用了stdOutLogging。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Solution.Identity.dll" stdoutLogEnabled="true" stdoutLogFile="\\?\%home%\LogFiles\stdout" />
</system.webServer>
</configuration>
在给定位置创建日志文件,遗憾的是所有文件的大小都为0字节。
事件日志提供以下数据:
<Event>
<System>
<Provider Name="IIS AspNetCore Module"/>
<EventID>1000</EventID>
<Level>1</Level>
<Task>0</Task>
<Keywords>Keywords</Keywords>
<TimeCreated SystemTime="2017-11-26T11:49:13Z"/>
<EventRecordID>149782328</EventRecordID>
<Channel>Application</Channel>
<Computer>XXXXXX</Computer>
<Security/>
</System>
<EventData>
<Data>Application 'MACHINE/WEBROOT/APPHOST/SOLUTIONIDENTITY' with physical root 'D:\home\site\wwwroot\' failed to start process with commandline 'dotnet .\Solution.Identity.dll', ErrorCode = '0x80004005 : c0000374.</Data>
</EventData>
</Event>
0x80004005表示缺少文件或版本冲突,但在部署时由nuget检索所有文件时可能会丢失哪个文件(bitbucket存储库中不包含任何库)。 我无法清楚地了解c0000374的含义。
该项目在kestrel上本地运行,并通过IIS无错误地运行。
项目文件如下
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<UserSecretsId>aspnet-Solution.Identity-f67088a4-3844-4ec8-abd5-12b6488e53f3</UserSecretsId>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup>
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
<ItemGroup>
<None Remove="Properties\PublishProfiles\solutionidentity - Web Deploy.pubxml" />
</ItemGroup>
<ItemGroup>
<Content Include="identity.pfx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="IdentityServer4" Version="2.0.0" />
<PackageReference Include="IdentityServer4.AspNetIdentity" Version="2.0.0" />
<PackageReference Include="IdentityServer4.EntityFramework" Version="2.0.0" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.1" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.3" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" PrivateAssets="All" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.1" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.1" />
<PackageReference Include="Serilog" Version="2.5.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="2.0.2" />
<PackageReference Include="Serilog.Sinks.File" Version="3.2.0" />
<PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" />
<PackageReference Include="Microsoft.AspNetCore.ApplicationInsights.HostingStartup" Version="2.0.1" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.1" />
</ItemGroup>
</Project>
我的program.cs看起来如下
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
尝试过的事情
我想我已经尝试了几乎所有我在微软论坛,堆栈溢出和谷歌上找到的东西。我有点没有选择。我希望你们中的一些人能给我一些线索。
答案 0 :(得分:0)
我使用bitbicket存储库解决了问题。 我有一个很直接的设置,我决定一个接一个地重播我的所有提交,直到某些东西不再起作用。
Identityserver喜欢使用x509证书来签署给定的令牌。不幸的是,azure不允许使用“新的X509Certificate2(路径,密码)”调用加载证书(pfx)。 这是因为私钥随后被添加到本地用户存储中,该存储不存在于azure中。 解决方案是使用仪表板加载证书,或者在构造X509Certificate2对象时将商店指定为第三个参数。
问题确实出现了,为什么不记录这个?为什么这会使dotnet进程崩溃,即使嵌入在try / catch块中也是如此?
此问题也报告给了azure支持服务,但我在解决之前解决了这个问题。我确实也问过这个问题,但是.net框架开发是另一个部门,我想我不会再被告知了。
每个人都感谢你一起思考。