HTML Presence Controls for Communications Server 14 CodePlex Project

Posted on Dot net Slackers See other posts from Dot net Slackers
Published on Fri, 18 Jun 2010 00:00:00 GMT Indexed on 2010/06/18 16:43 UTC
Read the original article Hit count: 683

Filed under:

Showing Presence on the Web

If youre running Office Communicator Server 2007 R2, you know that your only out-of-the-box option for showing presence on the web is to use the NameControl ActiveX control that ships as part of Office.  Being an ActiveX control, this obviously means that youre limited to Internet Explorer. 

Also, nobody likes ActiveX controls

What if you want to show the presence of users in a pure ASP.NET or HTML application and cant assume that the user has Communicator installed you need anASP.NET or HTML presence control. 

HTML Presence Controls for Microsoft Communications Server 14

We recently worked with the UC team at Microsoft on a keynote demo for TechEd 2010 in New Orleans.  The demo was for a fictitious airline Fabrikam Airlines that wanted to show the presence of customer service and reservations agents on its website. 

Customers could also start an instant message conversation with the agents using a Silverlight web chat window that used WCF to communicate with the backend UCMA application.

FabrikamAir-1[1]

FabrikamAir-1[1]

We built HTML Presence Controls that use AJAX to poll a REST-based WCF service running in IIS and hosting a UCMA 3.0 presence subscription application.  

Microsoft has graciously allowed us to publish these on CodePlex so that the development community can benefit from them:  http://htmlpresencecontrols.codeplex.com/

We will be maintaining the CodePlex project as new builds of UCMA 3.0 become available.  Check out the project home page on CodePlex for some more in-depth details on how the controls are implemented.

ASP.NET Server Control Implementation

Were providing an ASP.NET Server Control implementation that you can use stand-alone or in a GridView or Repeater
(or other layout control). 

The control has properties that allow you to control its appearance, e.g. you can choose whether or not to show the contacts name or availability text.

ServerControl[1]

You can also use the server control in a layout control such as a GridView by putting it in a TemplateColumn and binding to the Sip Uri in the data source.

GridView[1]

Disclaimer

Once we started working on these, we realized why Microsoft hasnt shipped such controls as part of the product.  There are some tradeoffs you have to be aware of when using these controls, heres the high level.

Privacy

The backend UCMA 3.0 application that subscribes to presence of contacts runs as a trusted application and can thus retrieve the presence of any user in the organization

Theres currently no good way in UCMA to apply any privacy rules to ensure that the consumer of the presence controls has permission to see the presence of the contacts that the controls are bound to. 

Just to be absolutely crystal clear These controls provide a way to query the presence of any user in the organization, regardless of the privacy relationship between the person consuming the controls and the contacts whose presence is being displayed.

Were exploring options for a design pattern that would allow you to inject some privacy controls.  Keep in mind though that you would most likely be responsible for implementing this logic, as there is currently no functionality in UCMA that allows you to do that.

Polling the WCF REST Service

The controls poll the backend WCF service to retrieve the presence of contacts - you can control the refresh interval so that they poll less often.

We implemented a caching layer so that the WCF service is always communicating with a presence cache it never communicates directly with Communications Server. 

For example, if your web page is showing the presence of sip:[email protected] and 500 people have the page open, the presence cache only contains one instance of the subscription Communications Server is not being polled 500 times for the presence of that contact.

Once the presence of a contact changes, it is updated in the cache. 

There are some server-based push mechanisms that would work nicely here, such as the one that Outlook Web Access 2010 uses.  Unfortunately we didnt have time to explore these options.

Community Contribution

Take a look at the project Issue Tracker, there are a couple of things we can use some help with.  Shoot me a note if youre interested in contributing to the project.

Did you know that DotNetSlackers also publishes .net articles written by top known .net Authors? We already have over 80 articles in several categories including Silverlight. Take a look: here.



Email this Article

© Dot net Slackers or respective owner