Ars*_*han 4 docker azure-sql-database .net-6.0
我有一个使用 Azure Sql 服务器的 .net6 应用程序。该应用程序在 .Net3.1 上运行良好,但是当移植到 .Net6 时,该应用程序会抛出 Sql 服务器错误
Microsoft.Data.SqlClient.SqlException (0x80131904):您尝试连接的 SQL Server 实例需要加密,但本计算机不支持它
dockerfile 非常通用,如下所示
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Presentation/Web.Cms/Web.Cms.csproj", "Presentation/Web.Cms/"]
RUN dotnet restore "Presentation\Web.Cms\Web.Cms.csproj"
COPY . .
WORKDIR "/src/Presentation/Web.Cms"
RUN dotnet build "Web.Cms.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Web.Cms.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Web.Cms.dll"]
EXPOSE 80
EXPOSE 443
USER ContainerAdministrator
Run Code Online (Sandbox Code Playgroud)
如果服务器支持,Microsoft.Data.SqlClient v2.0 及更高版本默认使用加密。
如果服务器使用不受服务器信任的证书,这将导致问题。在这种情况下,异常将包含一条消息(直接或在内部异常中),表明服务器证书不受信任。在这种情况下,您可以添加TrustServerCertificate=true到连接字符串。
特定于容器的另一个问题在无法使用 Microsoft.Data.SqlClient 2.0.0 打开从 windows1809 容器到 azure sql 数据库的连接中进行了描述:容器映像可能没有Security.dllin C:\Windows\System32。在那一期中使用了 Nano 图像。
Windows Containers 存储库中有一个相关问题。看来至少 .NET 5 运行时基础映像没有Security.dll.
SqlClient 问题中提到的解决方法之一是将文件复制到那里。链接问题中的一些评论显示了如何执行此操作。
从命令行
docker cp C:\Windows\System32\security.dll container-name:/Windows/System32/security.dll
Run Code Online (Sandbox Code Playgroud)
或者在 docker 文件中
COPY --from=core /Windows/System32/security.dll /Windows/System32/security.dll
Run Code Online (Sandbox Code Playgroud)
另一种方法是在 Windows 上启用托管网络,这也消除了对 Microsoft.Data.SqlClient.SNI 二进制文件的需要。要启用此功能,请在启动时设置以下开关:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);
Run Code Online (Sandbox Code Playgroud)
文章中提到的缺点是
托管 SNI 不支持非域 Windows 身份验证。
| 归档时间: |
|
| 查看次数: |
2673 次 |
| 最近记录: |