C#查询SharePoint列表时出现连接关闭异常求助
执行到clientContext.ExecuteQuery()时抛出异常,异常信息翻译为:基础连接已关闭: 发送时发生意外错误。
排查方向:
- 强制启用TLS 1.2:SharePoint Online仅支持TLS 1.2及以上版本,旧版.NET框架默认未启用。在初始化
ClientContext前添加以下代码:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - 排查网络与代理:检查网络是否有防火墙/代理拦截SharePoint请求,可尝试在无代理环境测试;若需代理,给
ClientContext配置代理:clientContext.Proxy = new WebProxy("代理地址", 端口); - 验证站点URL与权限:
- 确认
SiteUrl是完整有效站点地址(如https://xxx.sharepoint.com/sites/目标站点),避免域名或路径错误。 - 手动登录SharePoint验证
TenantLogin账号是否有目标站点及列表的读取权限。
- 确认
- 更新CSOM包版本:确保
Microsoft.SharePointOnline.CSOMNuGet包为最新稳定版,旧版本可能存在兼容性问题。 - 校验SecureString构造逻辑:临时用明文密码构造
SecureString测试,确认密码解密后转SecureString的逻辑无错误:var passWord = new SecureString(); foreach (char c in "你的测试明文密码") passWord.AppendChar(c); - 添加重试机制:网络波动可能导致连接中断,可引入重试逻辑(如Polly)捕获异常后重试请求。
用户提供的代码:
var clientContext = new ClientContext(ConfigurationManager.AppSettings["SiteUrl"]) { RequestTimeout = -1 }; var passWord = new SecureString(); foreach (var c in SecureMgr.GetDecryptedPassword(ConfigurationManager.AppSettings["TenantPwd"]).ToCharArray()) passWord.AppendChar(c); clientContext.Credentials = new SharePointOnlineCredentials(ConfigurationManager.AppSettings["TenantLogin"], passWord); var spList = clientContext.Web.Lists.GetByTitle(ConfigurationManager.AppSettings["ListAnnuaireUsers"]); clientContext.Load(spList); clientContext.ExecuteQuery();
内容的提问来源于stack exchange,提问作者Ricola
相关产品推荐
相关产品推荐

