Ok, this one is a strange issue.
I have created a console app with Visual Studio 2013. Added the “App for SharePoint Web Toolkit“ NuGet package to get the SharePoint.Client.dll
Then wrote just a few lines to test if it works:
static void Main(string[] args) { ClientContext context = new ClientContext("https://sharepoint/sites/test1"); var web = context.Web; context.Load(web); context.ExecuteQuery(); Console.WriteLine("Title: " + web.Title); }
This is against an on premises installation with Kerberos authentication (NTLM and Basic are also enabled). On the line context.ExeucteQuery();
it just waits a long time and then gives me a timeout and 400 error.
The weird thing: If Fiddler is open during the execution, everything works as expected. No timeout, no error.
Solution
The solution is fairly simple:
Just attach a handler to the ExecutingWebRequest
event and set the WebRequest.PreAuthenticate
to true
:
static void Main(string[] args) { ClientContext context = new ClientContext("https://sharepoint/sites/test1"); **context.ExecutingWebRequest += context_ExecutingWebRequest;** var web = context.Web; context.Load(web); context.ExecuteQuery(); Console.WriteLine("Title: " + web.Title); } static void context_ExecutingWebRequest(object sender, WebRequestEventArgs e) { **e.WebRequestExecutor.WebRequest.PreAuthenticate = true;** }