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;**
}