Azure Function v3 - 在启动中添加标识时“无法访问 Azure Functions 运行时”
Posted
技术标签:
【中文标题】Azure Function v3 - 在启动中添加标识时“无法访问 Azure Functions 运行时”【英文标题】:Azure Function v3 - "Azure Functions runtime is unreachable" when add Identity in Startup 【发布时间】:2021-09-03 01:18:58 【问题描述】:我有一个Azure Function (v3)
,它必须与数据库以及用户管理进行交互。
它具有一个依赖项,该项目还包含 DAL 以及所有上下文配置。
在函数的启动中,我将依赖项添加到 DbContext
并将其部署在 Azure 上,我没有问题。
除了DbContext
,我还添加Identity
并重新部署时,门户网站显示“Azure Functions 运行时无法访问”。
这是Startup.cs
的函数:
[assembly: FunctionsStartup(typeof(Directio.PeopleSee.OrderSynchronizer.Startup))]
namespace Directio.PeopleSee.OrderSynchronizer
public class Startup : FunctionsStartup
public override void Configure(IFunctionsHostBuilder builder)
builder.Services.AddHttpClient();
builder.Services.AddDbContext<DBContext>(options1 =>
options1.UseLazyLoadingProxies(false);
options1.UseSqlServer(Environment.GetEnvironmentVariable("DBConnectionString"), builder =>
builder.CommandTimeout(10);
);
)
.AddIdentity<AspNetUser, AspNetRole>(opt =>
opt.Password.RequireDigit = false;
opt.Password.RequireLowercase = false;
opt.Password.RequireNonAlphanumeric = false;
opt.Password.RequireUppercase = false;
opt.Password.RequiredLength = 0;
opt.Password.RequiredUniqueChars = 0;
opt.User.RequireUniqueEmail = false;
opt.SignIn.RequireConfirmedEmail = false;
opt.SignIn.RequireConfirmedAccount = false;
opt.SignIn.RequireConfirmedPhoneNumber = false;
)
.AddEntityFrameworkStores<DBContext>()
.AddDefaultTokenProviders();
builder.Services.AddOptions<FunctionAppSettings>().Configure<IConfiguration>((settings, configuration) => configuration.GetSection("FunctionAppSettings").Bind(settings));
builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
builder.Services.AddScoped<IUserService, UserServiceImpl>();
builder.Services.AddScoped<IRoleService, RoleServiceImpl>();
builder.Services.AddScoped<ISubscribersService, SubscriberServiceImpl>();
builder.Services.AddScoped<IOrdersService, OrdersService>();
所有服务注册都来自依赖项所链接的项目。
该函数以netcore3.1
为框架,部署在Azure Func App中,按量付费,Windows服务器,不是docker容器。
可能是什么问题?
【问题讨论】:
你有解决办法吗? @Sachin 我“解决了”它在启动时只添加没有身份的 EF 并使用IdentityFrameworkDBContext
类方法处理用户。您必须遵循一些规则才能正确填写您的 IdentityUser
属性。这里有一些例子:codeshare.io/9OjEE4
非常感谢..我也在尝试类似的方法,所以现在有信心可以实现:)再次感谢..
我想分享另一个提示,即使它与您的具体问题无关。由于这是当您搜索“Azure Functions 运行时无法访问”时 SO 上的第一个结果,它可能对其他人有所帮助:确保您的函数名称(即通过 FunctionName Annotation)中没有任何空格。
【参考方案1】:
当您添加身份时,您还添加了 AspNetCore 身份验证依赖项。出于某种原因,Functions host 检查您的应用程序中是否存在这些依赖项,并阻止 Host 模块添加允许门户访问项目中的功能的内置身份验证方案。
如果您仍想在启动时加载身份组件,我建议您查看https://www.nuget.org/packages/DarkLoop.Azure.Functions.Authorize
这是一篇描述其工作原理的帖子:https://blog.darkloop.com/post/functionauthorize-for-azure-functions-v3
你可以打电话
builder.AddAuthentication();
builder.AddAuthorization();
// or
builder.Services.AddFunctionsAuthentication();
builder.Services.AddFunctionsAuthorization();
此调用强制加载内置身份验证功能,并允许您添加更多身份验证依赖项和方案。
通话结束后,您可以拨打电话AddDbContext<...
和AddIdentity<...
Azure 门户应该能够获得它需要的关于你的函数的所有信息。
【讨论】:
以上是关于Azure Function v3 - 在启动中添加标识时“无法访问 Azure Functions 运行时”的主要内容,如果未能解决你的问题,请参考以下文章
如何在启动类中使用 Azure Function 中的中间件