IIS and Websockets

Posted: Sep 05, 2012  2 comments  

Average Rating

Tags
IIS8
websocket

Share this Post

Jenny Lawrance's Blog

In IIS8 we introduced a new interface and associated API's to handle Websocket requests. IWebSocketContext.

Setup: To get this functionality working, Web Socket Protocol module should be enabled in the IIS features.

Runtime: If a incoming request is to be accepted as a Websocket request and subsequently upgraded, the handler must set the response status as 101. It should initiate a IHttpResponse->Flush, which will trigger the IIS Websocket module to do the necessary work to send out the 101 response to the client.

Once the response is sent, the handler can get a pointer to the IWebSocketContext through the IHttpContext3's GetNamedContext API.

The IWebSocketContext API exposes the necessary API's to read / write Websocket data.

 

Sample Code to get pointer to IWebSocketContext:

    //
    // Get Pointer to the IHttpContext3
    //

    hr = HttpGetExtendedInterface( g_pServerInfo, pHttpContext, &pHttpContext3 );
    if ( FAILED ( hr ) )
    {
        goto Finished;
    }

    //
    // Get Pointer to IWebSocketContext
    //

    _pWebSocketContext = (IWebSocketContext *)pHttpContext3->GetNamedContextContainer()->GetNamedContext("websockets");

    if ( _pWebSocketContext == NULL )
    {
        hr = HRESULT_FROM_WIN32( ERROR_FILE_NOT_FOUND );
        goto Finished;
    }

 

 

Reference

RFC http://www.rfc-editor.org/rfc/rfc6455.txt

IWebSocketContext:: http://msdn.microsoft.com/en-us/library/hh852804(v=vs.90).aspx

IHttpContext3: http://msdn.microsoft.com/en-us/library/hh852784(v=vs.90

 

Comments

Thanks for the sample code.  I'm adapting an existing IIS Native Module to handle the WebSocket protocol, but cannot find the essential header: Iiswebsocket.h.  I have the latest environment - Windows 8 professional (6.2.9200) and Visual Studio 2012 (v11.0.50727 with .NET Framework v4.5.50709).  I have downloaded both the Windows 8 and Windows 2012 SDKs but it doesn't appear to be included in these either.

Any ideas?

Nov 17 2012 by chrismunt

Hi, Thanks for the nice article.

I really want to implement native websocket module.

Since I couldn't find that, I wrote "Iiswebsocket.h" by myself.

I referrd to this document for that.

msdn.microsoft.com/.../hh852804(v=vs.90).aspx

Now I can compile it, but it seems to not work.

On the same environment, managed version works fine.

Are there any working examples ?

Jan 08 2013 by tkmsm

Submit a Comment

  • Plain text is accepted.
  • URLs starting with http:// are converted to links.