.NET Core Blazor Server 无法访问 Cloud Run 中的 Cloud SQL

问题描述 投票:0回答:1

我的云中有多个使用 PHP 和 .NET Core 运行的应用程序。我现有的 ASP.NET Core Web API 在尝试连接我的 Cloud SQL (MySQL) 时没有问题。使用公共 IP 或私有 IP 与 VPC 进行访问都可以正常工作。但是,我在 Cloud Run 中使用 .NET Core 上的 Blazor Server 尝试了另一个应用程序,但无法连接到同一数据库服务器。

这是我的连接字符串

"DefaultConnection": "Server=/cloudsql/my-project-id:asia-southeast2:my-cloud-sql; User ID=userDb; Password=verysecret; Database=mydb_dev"

我尝试连接 VPC,创建一个 VPC 无服务器并将其附加到我的 Blazor 应用程序。

所以我的连接字符串变成这样:

"DefaultConnection": "Server=10.0.0.8; User ID=userDb; Password=verysecret; Database=mydb_dev"

它唯一起作用的时候是当我将 Cloud SQL 的授权网络更改为允许任何 IP 地址 (0.0.0.0/0) 时。我正在使用 Entity Framework Core 和包

Pomelo.EntityFrameworkCore.Mysql
,它可以与另一个 Cloud Run 上的 ASP.NET Core Web API 配合使用。

下面是我的 dockerfile,以防相关

# Stage 1: Build the Blazor Server app
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env
WORKDIR /app

# Copy csproj and restore dependencies
COPY *.csproj ./
RUN dotnet restore

# Copy all the source code and build the app
COPY . ./
RUN dotnet publish -c Release -o /out /p:UseAppHost=false

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
# Expose port 80
USER app
EXPOSE 8080
EXPOSE 8081

# Copy published files
COPY --from=build-env /out .

ENTRYPOINT ["dotnet", "MyBlazorApp.dll"]
google-cloud-platform entity-framework-core blazor google-cloud-sql google-cloud-run
1个回答
0
投票

我根据@Curtis 评论解决了这个问题。 这是个愚蠢的问题。

我的 Blazor 中有 EF Scaffold,它正在创建 OnConfiguring 方法,并且不是从 appsettings.json 获取连接字符串,而是像这样进行硬编码

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    { 
        optionsBuilder.UseMySql("server=10.0.0.1;user id=appUser;password=myPass;database=mydatabase", Microsoft.EntityFrameworkCore.ServerVersion.Parse("8.0.31-mysql"));
    }

我删除了上面的行并将这些行添加到了program.cs

string connString = builder.Configuration.GetConnectionString("DefaultConnection") ?? string.Empty;

builder.Services.AddDbContext<MoccaDbContext>(options => {
    options.UseMySql(connString, ServerVersion.AutoDetect(connString));
});
builder.Services.AddHttpContextAccessor();

现在工作正常,我可以使用私有和公共 IP 地址连接到 Cloud Run

© www.soinside.com 2019 - 2024. All rights reserved.