• View Communities
    • Citrix Developer Network
      The place for unfiltered straight talk on Citrix products. Blogs, code downloads, best practices, APIs, and more can all be found here.
    • Citrix Ready Community Verified
      Does it work with Citrix? Application compatibility questions are a thing of the past with the new Citrix Community Verified site.
    • Blogs
      Learn the latest from the Citrix employees who are building application delivery infrastructure technologies.
    • Blogosphere
      The Citrix Blogosphere is a window into the thousands of conversations taking place about Citrix and Application Delivery.
  •  Sign In
The Citrix Blog
Personal Blog
Joseph Nord
Related Tags
posted by Joseph Nord

This post introduces the Streaming Profiler SDK, provides a description of what it does, how it works and how it can be a useful tool for managing your Application Streaming profiles.  The Profiler SDK has been around since the 1.1 release of the Streaming Client (PS 4.5 HRP 1) and the 1.2 update that accompanies XenApp 5.0 was recently announced.

Here's a link to the download site and the official documentation.

For a moment, put your programmer hat on and consider that the Streaming Profiler (the guts of it) have more than one client.  The "back end" supports the Streaming Profiler GUI (pkgr.exe), the Streaming Client itself (radesvc.exe) and the Citrix publishing system, aka the Access Management Console. 

Architecturally, the Streaming Profiler "back end" is the ONLY thing that is allowed to touch the .profile content.  Sure, others can and we haven't exactly HIDDEN the content, but in theory, the ONLY thing that knows the internals of how a .profile and .CAB are formatted is the profiler back end.  Notice that the backward / foreward compatibility stuff is at the API layer - not the disk content. 

Here's a picture...

 

This was the original layout of Application Streaming.  The separation of function said the GUI talented people do GUIs, the publishing people do publishing and the guts of how the streaming client works people do the back end and the service.   I was in this last group, had development responsibility for the back end and the above is rough description of how it all plugs together.  We decided on C++ as the interface between the pieces; shared header files loosly modeled on COM so it could be consumed.  It seemed to be a good balance at the time and we pushed on and built it.   There were some issues.  Being based on shared headers, the API is "per-build" dependent.  CPP doesn't meld well for portability.  C wasn't the right answer; too much state.  We let the header dependence go since - afterall - we are all building in the same build tree and it was a foregone given that all of the pieces would be updated every time we update the Streaming Client/Profiler.

Along came the real world

Customers, partners, ISVs also want to manage profiles and they want to do it from PROGRAM CODE.  The API is broke and the wisdom of the original developer who laid out the internal API rightly had rocks thrown at it.  I should have stuck with vanilla 'C' and all would be good - but that too had its own pitfalls.

The solution was a conversion of the private API from "something like COM" to "really COM" and this is the profiler SDK.  Picture below.

A vision to the future

Standard disclaimers and no promises, but the logical next step is to convert the internal components to use the external SDK.  The benefits are that we can be SURE that the SDK is a complete reflection of the internal API and that ... it works.  It will take some to get there - lots of time - but this is where I want it to go.

Joe Nord
Product Architect Application Streaming
Citrix Systems, Fort Lauderdale, FL

Labels

architecture architecture Delete
architecture architecture Delete
lang-eng lang-eng Delete
nonspecific nonspecific Delete
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.