Daniel's profileDaniel Larson's Develope...BlogListsGuestbookMore Tools Help

Blog


    July 26

    We got an iphone. (actually, 2)

    photo

    Best computer ever. We got 2 of them. Violet loves it as well... this is her flipping through pictures with the touch screen (mainly pictures of her). 
    July 23

    KB: When is the SPContext.Current available ? (SharePoint dev)

    We always assumed wherever you have an HTTP Context (i.e., wherever SPContext.Current is not null), that you could access the SharePoint context through SPContext.Current. This was the case with MOSS 2007 RTM and SP1, but this changed with the recent Infrastructure Update. The following update to when SPContext is supported has been confirmed by Microsoft PSS. (Props to Nishand for confirming this behavior change.)

    Prior to the IHttpHandler.ProcessRequest method, the SharePoint application runtime is busy building an impersonation context of the calling user. This means that you CANNOT access SPContext.Current UNTIL the ProcessRequest method. This also means within the constructor of the handler OR from a factory pattern-- regardless of whether it's a Page or IHttpHandler endpoint. Note that this is a COMPLETE CHANGE OF BEHAVIOR (processing timeline) that the infrastructure update introduces.

    Bottom line-- this means that if you are implementing IHttpHandlerFactory instances, you cannot access the SPContext.Current object or anything deriving from there in the factory—you must wait until IHttpHandler.ProcessRequest. (NOTE: I haven't tested this, but this also will affect HTTP modules).

    The following code sample demonstrates the bug. The handler factory will fail every time, while the handler will work every time.

    using System.Web;
    using Microsoft.SharePoint;

    namespace NGSupport{
        // Unsupported code: fails AFTER infrastructure update
        public class TestHandlerFactory : IHttpHandlerFactory{
            public IHttpHandler GetHandler(HttpContext context,
                        string requestType, string url, string pathTranslated) {
                // Breaks every time (after infrastructure update)
                // as WSS hasn't loaded the impersonation context,
                // and the SharePoint context is NOT available
                var spContext = SPContext.Current;
                return new TestHandler();
            }
            public void ReleaseHandler(IHttpHandler handler) {}
        }

        // Supported code: works every time
        public class TestHandler : IHttpHandler{
            public bool IsReusable{get { return true; } }
            public void ProcessRequest(HttpContext context) {
                // Will work just fine-- you can always access SPContext.Current in ProcessRequest
                var spContext = SPContext.Current;
                context.Response.Write(spContext.Web.Title.ToString());
            }
        }
    }

    To test this out, compile this into a DLL called "NGSupport" and register the following handlers in web.config (may require elevated or WSS_Medium trust):

    <add verb="GET,HEAD" path="foo.test" type="NGSupport.TestHandlerFactory, NGSupport" validate="false" />
    <add verb="GET,HEAD" path="bar.test" type="NGSupport.TestHandler, NGSupport" validate="false" />

    You should see that foo.test will work before the infrastructure update but break after it's applied, however you'll see that bar.test will always work as that is the supported code path.

    Props to the NewsGator dev, support and qa teams for identifying and resolving this issue quickly.

    July 13

    Pre-order on Amazon: Developing Service-Oriented AJAX Applications on the Microsoft® Platform

    We're live on Amazon-- and to celebrate I'm giving away the first confirmed pre-order. The first person to send me proof of pre-order (you know how to reach me*...) will get a free signed book from me and a refund of your purchase price! (How can you lose????)

    Here's the link to the pre-order: Developing Service-Oriented AJAX Applications on the Microsoft Platform

     

    A big shout-out to my book team, without whom the book really would have been less interesting: my tech reviewer Per Blomqvist, my editor John Pierce, and my peer review team Mikhail Dikov, Darrin Bishop, Nick Swan, Al Pascual, Alvin Bruney, Mark Collins, Morgan Everett and Tim Colton. Of course, a bigger shout-out to my NewsGator dev team, Lane Mohler, Sherstin Lauman and Brian Agnes for working out and refining a kick-ass AJAX architecture with me over the last several years. This book reflects what we all learned at NewsGator! Oh, and a big thanks to Sallina for letting me write this book... I couldn't have done it without my wife's support.

    I'm just wrapping up chapter 8 now, with at least 3 chapters left to go. I'm also going to be releasing a MAJOR update to the SharePoint AJAX Toolkit based on this book (the last one was based on Inside WSS). If you're writing AJAX code based on the SharePoint AJAX Toolkit, I'd love to hear from you and compare notes.

    * @danlarson.com

    July 03

    Book plug: Real World SharePoint 2007

    I just picked this book up to help me through forms based authentication and setup. My friend Stacy Draper wrote the chapter on forms based authentication, so it was a no-brainer to read Stacy's methods rather than futzing with it myself. It took me an hour to read through the chapter and set it up. There's some other great topics in there too, so check out the table of contents and add it as a special-case book to your library. It's chock full of good advice, tips and tricks from real world SharePoint experience as the title suggests. Check it out here: Real World SharePoint 2007 (Amazon).