在SharePoint CSOM项目中在执行ExecuteQuery()时报错如下
The underlying connection was closed: An unexpected error occurred on a receive
详细内容为
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.SharePoint.Client.SPWebRequestExecutor.Execute()
at Microsoft.SharePoint.Client.ClientContext.GetFormDigestInfoPrivate()
at Microsoft.SharePoint.Client.ClientContext.EnsureFormDigest()
at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()
源代码如下
string url = @"https://SPServer/mydomain.net/sites/059999";
NetworkCredential nc = new NetworkCredential("lixm", "mypassword", "mydomain");
ClientContext ctx = new ClientContext(url);
ctx.Credentials = nc;
Web web = ctx.Web;
ctx.Load(web);
ctx.ExecuteQuery(); //报错位置
Console.WriteLine(web.Title);
Console.ReadKey();
Console.WriteLine("--");
原因分析,
因在CSOM调用时,会以客户端模型的方式调用服务器资源,在进行网络链接时使用网络协议TLS,如果不指定,将会报上述错误,可能在测试环境中上部分代码不会抛出异常,但在生产环境中严格的网络协议要求下会出现,所以在代码中指定连接的协议即可,代码如下
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
//添加上付代码即可解决问题。
string url = @"https://SPServer/mydomain.net/sites/059999";
NetworkCredential nc = new NetworkCredential("lixm", "mypassword", "mydomain");
ClientContext ctx = new ClientContext(url);
ctx.Credentials = nc;
Web web = ctx.Web;
ctx.Load(web);
ctx.ExecuteQuery(); //报错位置
Console.WriteLine(web.Title);
Console.ReadKey();
Console.WriteLine("--");