You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Maui安卓应用连接SQL Server 2005预登录握手出错求助

解决.NET Maui安卓端连接SQL Server的预登录握手错误

问题概述

Windows环境下运行.NET Maui项目可正常连接SQL Server,但同WiFi网络的安卓设备执行await connection.OpenAsync();时触发错误:

已成功与服务器建立连接,但预登录握手期间发生错误。(provider: TCP Provider, error: 35 - 捕获到内部异常)

已确认:

  • 安卓、Windows端均可Ping通SQL Server服务器
  • 连接字符串已配置Encrypt=False;TrustServerCertificate=True;

核心相关代码:

// 连接字符串配置
sqlServerConnection1 = "Server=172.30.20.4;Database=HK_UDSdb;User Id=sa;Password=strongpassword;Encrypt=False;TrustServerCertificate=True;";

// 连接执行逻辑
using (var connection = _databaseHelper.SQLConnection())
{
    await connection.OpenAsync(); // 安卓端此处触发报错
    // ... 查询逻辑
}

排查与解决方案

1. 检查SQL Server TCP/IP端口配置

  • 打开SQL Server配置管理器,进入SQL Server网络配置 -> MSSQLSERVER的协议,确认TCP/IP已启用
  • 双击TCP/IP,切换到IP地址标签页:
    • 确保IPAll下的TCP端口设置为1433(或你自定义的端口)
    • 检查服务器所在网段的IP地址(如172.30.20.x),对应条目需启用,且TCP端口与IPAll一致
  • 修改后重启SQL Server服务生效

2. 连接字符串显式指定端口

安卓网络栈可能对默认端口解析存在异常,在Server字段后追加端口号:

sqlServerConnection1 = "Server=172.30.20.4,1433;Database=HK_UDSdb;User Id=sa;Password=strongpassword;Encrypt=False;TrustServerCertificate=True;";

3. 确认安卓网络权限

检查Platforms/Android/AndroidManifest.xml,确保已添加必要权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Android 10及以上设备可额外添加ACCESS_WIFI_STATE权限。

4. 调整SQL Server身份验证与账户权限

  • 确认SQL Server已启用混合模式身份验证(Windows+SQL Server身份验证)
  • 检查sa账户状态:在SQL Server的登录名中,确保sa已启用,且状态为「允许连接到数据库引擎」
  • 授予sa对目标数据库(HK_UDSdb、HK_UDSorderdb)的权限,如db_datareader、db_datawriter

5. 适配SQL Server TLS版本

安卓设备的TLS支持版本可能与Windows不同,若SQL Server强制使用高版本TLS(如TLS 1.3),会导致握手失败:

  • 登录SQL Server所在服务器,打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
  • 若安卓设备系统版本较旧,尝试启用TLS 1.0/TLS 1.1;或升级安卓设备系统以支持更高版本TLS
  • 修改后重启服务器生效

6. 替换为Microsoft.Data.SqlClient(备选)

Maui推荐使用Microsoft.Data.SqlClient替代旧版System.Data.SqlClient:

  • 移除旧SQL Client引用,安装NuGet包Microsoft.Data.SqlClient
  • 修改代码中的连接对象引用,确保使用Microsoft.Data.SqlClient.SqlConnection

验证步骤

  1. 若修改了服务器配置,重启SQL Server服务
  2. 清理Maui安卓构建缓存,重新部署到设备
  3. 执行连接测试,确认await connection.OpenAsync();是否成功

内容的提问来源于stack exchange,提问作者Raffy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:03:22