SharePoint 2013: Timeout on ClientContext.ExecuteQuery

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;
        }
Comments are closed