<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Azure Service Bus 1.5</title>
        <link>http://www.rickgaribay.net/category/45.aspx</link>
        <description>Azure Service Bus 1.5</description>
        <language>en-US</language>
        <copyright>Rick G. Garibay</copyright>
        <managingEditor>rick@rickgaribay.net</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <item>
            <title>DCC 2011.2 Lap Around Azure Service Bus: The Goods</title>
            <link>http://rickgaribay.net/archive/2011/11/05/dcc-2011.2-lap-around-azure-service-bus-the-goods.aspx</link>
            <description>&lt;p&gt;Thanks to all that came out to my “&lt;a href="http://nov2011.desertcodecamp.com/session/430" target="_blank"&gt;Lap Around Azure Service Bus Brokered Messaging&lt;/a&gt;” talk at Desert Code Camp today. &lt;/p&gt;  &lt;p&gt;We covered a ton of content including things a few folks didn’t know about relay messaging capabilities in Azure Service Bus and demonstrated how simple it is to expose a REST or SOAP endpoint from behind the firewall. I also demonstrated the brand new load balancing capabilities that were just released last week. &lt;/p&gt;  &lt;p&gt;From there, we dove deep into the .NET API to walk through how to provision queues and topics from code and start messaging within minutes by simply grabbing the Azure Service Bus NuGet package and writing a few lines of code.&lt;iframe height="327" src="http://r.office.microsoft.com/r/rlidPowerPointEmbed?p1=1&amp;amp;p2=1&amp;amp;p3=SDDF930EE6F91132FD!422&amp;amp;p4=&amp;amp;kip=1" frameborder="0" width="402" scrolling="no" align="right"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Next, we explored the REST API, and how simple it is for any HTTP client, regardless of platform to take advantage of the robust messaging capabilities that Azure Service Bus queues and topics have to offer.&lt;/p&gt;  &lt;p&gt;Last but not least, we wrapped up with a quick walkthrough of the NeMessagingBinding and how simple it is to send and receive messages over a queue using the familiar WCF programming model.&lt;/p&gt;  &lt;p&gt;I hope that each of you will unlock new possibilities with the power that these hybrid messaging capabilities have to offer. &lt;/p&gt;  &lt;p&gt;I’d also like to thank &lt;a href="http://www.pluralsight-training.net/microsoft/" target="_blank"&gt;Pluralsight&lt;/a&gt; for sponsoring my session. The &lt;a href="http://twitter.com/#!/search/realtime/%23dcc11%20%23Azure%20%23ServiceBus%20%23Q1" target="_blank"&gt;quiz is now up&lt;/a&gt; for the first 5 smartest attendees. &lt;/p&gt;  &lt;p&gt;Search for hashtags &lt;a href="http://twitter.com/#!/search/realtime/%23dcc11%20%23Azure%20%23ServiceBus%20%23Q2" target="_blank"&gt;#dcc11 #Azure #ServiceBus #Q1 to #Q5.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Good Luck! &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="229"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="middle" width="91"&gt;&lt;strong&gt;Code Demos&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="middle" width="136"&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="https://skydrive.live.com/embedicon.aspx/Public/Talks/DCC%202011.2?cid=df930ee6f91132fd&amp;amp;sc=documents" frameborder="0" marginwidth="0" scrolling="no" align="right"&gt;&lt;/iframe&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Happy Messaging!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/323.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2011/11/05/dcc-2011.2-lap-around-azure-service-bus-the-goods.aspx</guid>
            <pubDate>Sat, 05 Nov 2011 21:33:25 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2011/11/05/dcc-2011.2-lap-around-azure-service-bus-the-goods.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/323.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/323.aspx</trackback:ping>
        </item>
        <item>
            <title>Azure Service Bus Relay Load Balancing Demo</title>
            <link>http://rickgaribay.net/archive/2011/10/30/azure-service-bus-relay-load-balancing-demo.aspx</link>
            <description>&lt;p&gt;This week, the highly anticipated support for load balancing relay endpoints was released to the Azure Service Bus messaging fabric as first hinted by &lt;a href="http://twitter.com/#!/TheCATerminator/statuses/129364944436211713" target="_blank"&gt;Velery Mizonov&lt;/a&gt; and later officially announced by &lt;a href="http://blogs.msdn.com/b/avkashchauhan/" target="_blank"&gt;Avkash Chauhan&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://seroter.wordpress.com/2011/10/27/testing-out-the-new-appfabric-service-bus-relay-load-balancing/#comment-9496" target="_blank"&gt;Richard Seroter&lt;/a&gt; and &lt;a href="http://blog.codit.eu/post/2011/10/27/New-load-balancing-capabilities-in-the-AppFabric-Service-Bus-Relay-service.aspx" target="_blank"&gt;Sam Vanhoutte&lt;/a&gt; posted some very helpful walkthroughs of the functionality, so I thought I would follow up with a quick webcast to show Azure Service Bus Relay load balancing in action.&lt;/p&gt;  &lt;p&gt;In the demo, I show starting 3 relay endpoints using the NetTcpRelayBinding with no address already in use exceptions and firing a series of messages over the bus which arrive at one of the 3 endpoints.&lt;/p&gt; &lt;iframe height="315" src="http://www.youtube.com/embed/K9ac1Ekjg-8" frameborder="0" width="560" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;This is a feature that many customers and the community has been clamoring for for some time and it is great to see this live!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/321.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2011/10/30/azure-service-bus-relay-load-balancing-demo.aspx</guid>
            <pubDate>Mon, 31 Oct 2011 05:30:00 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2011/10/30/azure-service-bus-relay-load-balancing-demo.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/321.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/321.aspx</trackback:ping>
        </item>
        <item>
            <title>New Article in CODE Magazine on Azure Service Bus Queues &amp;amp; Topics</title>
            <link>http://rickgaribay.net/archive/2011/10/26/new-article-in-code-magazine-on-azure-service-bus-queues.aspx</link>
            <description>&lt;p&gt;I am pleased to share that my new article on &lt;a href="http://www.code-magazine.com/article.aspx?quickid=1112041"&gt;Azure Service Bus Queues and Topics&lt;/a&gt; has just been published by &lt;a href="http://www.code-magazine.com/SearchResults.aspx?search=garibay"&gt;CODE Magazine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;CODE Magazine is a leading Microsoft technical journal with a worldwide in-print circulation in excess of 20,000 along with on-line, &lt;a href="http://www.xiine.com/"&gt;Xiine&lt;/a&gt; and &lt;a href="http://www.amazon.com/CODE-Magazine-2011-Nov-ebook/dp/B005XN7RFA/ref=sr_1_8?s=digital-text&amp;amp;ie=UTF8&amp;amp;qid=1319558915&amp;amp;sr=1-8"&gt;Amazon Kindle&lt;/a&gt; media distribution. CODE is distributed to a combination of paid subscriptions, quali&lt;a target="_blank" href="http://www.code-magazine.com/Index.aspx"&gt;&lt;img style="BACKGROUND-IMAGE: none; BORDER-RIGHT-WIDTH: 0px; MARGIN: 2px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: right; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px" title="image" border="0" alt="image" align="right" width="164" height="210" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/New-Article-on-Azure-Service-Bus-Queues-_866B/image_3.png" /&gt;&lt;/a&gt;fied requests, and newsstand sales. In addition, CODE Magazine has bonus distribution at targeted Microsoft-oriented conferences and targeted industry events throughout the year such as Microsoft Professional Developer Conference (PDC), Tech Ed, DevTeach, MVP Global Summit, DevConnections, Devscovery, QCon, Code Camps, and more!&lt;/p&gt;
&lt;p&gt;Here is the link to the article: &lt;a href="http://www.code-magazine.com/article.aspx?quickid=1112041"&gt;http://www.code-magazine.com/article.aspx?quickid=1112041&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The article covers critical capabilities provided by Azure Service Bus for composing distributed messaging solutions for the hybrid enterprise and how the latest release delivers on the Software + Services vision that was first laid out over five years ago. &lt;/p&gt;
&lt;p&gt;The new release includes the addition of Queues and Topics which build on top of an already robust set of capabilities introducing new levels of reliability for building loosely coupled distributed solutions across a variety of clients and services, be they on-premise, in the cloud, or a combination of the two.&lt;/p&gt;
&lt;p&gt;There are many exciting changes happening within Microsoft around integration and middleware, and the release of Service Bus Brokered Messaging/Queues and Topics is a strong reflection of the commitment to the platform that I believe is going to make this new wave of innovation more exciting than ever before.&lt;/p&gt;
&lt;p&gt;It has been a tremendous privilege to have the opportunity to work with the Azure Service Bus team and experiment with the early bits ahead of release. I’d like to thank Todd Holmquist-Sutherland, &lt;a target="_blank" href="http://twitter.com/clemensv"&gt;Clemens Vasters&lt;/a&gt;, &lt;a target="_blank" href="http://twitter.com/@AbhishekRLal"&gt;Abhishek Lal&lt;/a&gt; and &lt;a target="_blank" href="http://twitter.com/@dingha"&gt;David Ingham&lt;/a&gt; for the unprecedented access to their team, resources and information as well as kindly and patiently answering my many questions over the last several weeks.&lt;/p&gt;
&lt;p&gt;Long live messaging!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/320.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2011/10/26/new-article-in-code-magazine-on-azure-service-bus-queues.aspx</guid>
            <pubDate>Wed, 26 Oct 2011 17:20:03 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2011/10/26/new-article-in-code-magazine-on-azure-service-bus-queues.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/320.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/320.aspx</trackback:ping>
        </item>
        <item>
            <title>Azure AppFabric Service Bus Brokered Messaging GA &amp;amp; Rude CTP Diffs</title>
            <link>http://rickgaribay.net/archive/2011/09/14/azure-appfabric-service-bus-brokered-messaging-ga-amp-rude-ctp.aspx</link>
            <description>&lt;p&gt;Today at the Build conference in Anaheim California, Satya Nadella, President Server and Tools business announced general availability of the production release of AppFabric Queues and Topics, otherwise known as Brokered Messaging.&lt;/p&gt;  &lt;p&gt;Brokered Messaging introduces durable queue capabilities and rich, durable pub-sub with topics and subscriptions that compliment the existing Relayed Messaging capabilities.  &lt;/p&gt;  &lt;p&gt;I covered Brokered Messaging following the &lt;a href="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx" target="_blank"&gt;May CTP release&lt;/a&gt; of &lt;a href="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx" target="_blank"&gt;Queues&lt;/a&gt; and followed up shortly with an overview and exploration of &lt;a href="http://rickgaribay.net/archive/2011/05/31/exploring-appfabric-service-bus-v2-may-ctp-topics.aspx" target="_blank"&gt;Topics&lt;/a&gt; (please see some other great resources at the end of this post).&lt;/p&gt;  &lt;p&gt;Since then, there was a June CTP release which included the new AppFabric Application and no visible changes to Brokered Messaging, however since its release, the AppFabric Messaging team has been hard at work refining the API and behaviors based on feedback from Advisors, MVPs and the community at large. &lt;/p&gt;  &lt;p&gt;Since I’ve already covered Queues and Topics in the aforementioned posts, I’ll dive right in to some terse examples which demonstrate the API changes. Though not an exhaustive review of all of the changes, I’ve covered the types that your most likely to come across and will cover Queues, Topics and Subscriptions extensively in my upcoming article in &lt;a href="http://www.code-magazine.com/SearchResults.aspx?search=garibay" target="_blank"&gt;CODE Magazine&lt;/a&gt; which will also include more in-depth walk-throughs of the .NET Client API, REST API and WCF scenarios.&lt;/p&gt;  &lt;p&gt;Those of you who have worked with the CTPs will find some subtle and not so subtle changes, but all in all I think all of the refinements are for the best and I think you’ll appreciate them as I have. For those new to Azure AppFabric Service Bus Brokered Messaging, you’ll benefit most from reading my first two posts based on the May CTP (or any of the resources at the end of this post) to get an idea of the why behind queues and topics and then come back here to explore the what and how.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;A Quick Note on Versioning&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In the CTPs that preceded the release of the new Azure AppFabric Service Bus features, a temporary assembly called “Microsoft.ServiceBus.Messaging.dll” was added to serve a container for new features and deltas that were introduced during the development cycle. The final release includes a single assembly called “Microsoft.ServiceBus.dll” which contains all of the existing relay capabilities that you’re already familiar with as well as the addition of support for queues and topics. If you are upgrading from the CTPs, you’ll want to get ahold of the new Microsoft.ServiceBus.dll version 1.5 which includes everything plus the new queue and topic features.&lt;/p&gt;  &lt;p&gt;The new 1.5 version of the Microsoft.ServiceBus.dll assembly targets the .NET 4.0 framework. Customers using .NET 3.5 can continue using the existing Microsoft.ServiceBus.dll  assembly (version 1.0.1123.2) for leveraging the relay capabilities, but must upgrade to .NET 4.0 to take advantage of the latest features presented here.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;.NET Client API&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Queues&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="1072"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="251"&gt;&lt;strong&gt;May/June CTP&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="251"&gt;&lt;strong&gt;General Availability&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="568"&gt;&lt;strong&gt;Comments&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;ServiceBusNamespaceClientSettings&lt;/td&gt;        &lt;td valign="top" width="251"&gt;NamespaceManagerSettings&lt;/td&gt;        &lt;td valign="top" width="568"&gt;New class for encapsulating endpoint and security settings.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;N/A&lt;/td&gt;        &lt;td valign="top" width="251"&gt;TokenProvider&lt;/td&gt;        &lt;td valign="top" width="568"&gt;New class for acquiring a WRAP token from ACS.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;ServiceBusNamespaceClient&lt;/td&gt;        &lt;td valign="top" width="251"&gt;NamespaceManager&lt;/td&gt;        &lt;td valign="top" width="568"&gt;Root management object for creating Queues, Topics, Subscriptions.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;Queue&lt;/td&gt;        &lt;td valign="top" width="251"&gt;QueueDescription&lt;/td&gt;        &lt;td valign="top" width="568"&gt;In May/June CTP, Topic / Queue / Subscription were management objects. All create/delete operations were moved to NamespaceManager and the state operations are now on TopicDescription/QueueDescription etc.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;MessagingFactorySettings&lt;/td&gt;        &lt;td valign="top" width="251"&gt;MessagingFactorySettings&lt;/td&gt;        &lt;td valign="top" width="568"&gt;New class for encapsulating security settings.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;MessagingFactory&lt;/td&gt;        &lt;td valign="top" width="251"&gt;MessagingFactory&lt;/td&gt;        &lt;td valign="top" width="568"&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;BrokeredMessage&lt;/td&gt;        &lt;td valign="top" width="251"&gt;BrokeredMessage&lt;/td&gt;        &lt;td valign="top" width="568"&gt;No longer a factory. Simply instantiate a BrokeredMessage.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;MessageSender&lt;/td&gt;        &lt;td valign="top" width="251"&gt;MessageSender&lt;/td&gt;        &lt;td valign="top" width="568"&gt;Optional, for use when you want to abstract away queue or topic.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="251"&gt;MessageReceiver&lt;/td&gt;        &lt;td valign="top" width="251"&gt;MessageReceiver&lt;/td&gt;        &lt;td valign="top" width="568"&gt;Optional, for use when you want to abstract away queue or topic.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Below is a representative sample for creating, configuring, sending and receiving a message on a queue:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Administrative Operations&lt;/strong&gt;&lt;/p&gt;  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 817px; padding-right: 5px; height: 397px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:             &lt;span style="color: #008000"&gt;// Configure and create NamespaceManager for performing administrative operations&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:             NamespaceManagerSettings settings = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NamespaceManagerSettings();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:             TokenProvider tokenProvider = settings.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuer,key);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:             
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:             NamespaceManager manager = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NamespaceManager(ServiceBusEnvironment.CreateServiceUri("&lt;span style="color: #8b0000"&gt;sb&lt;/span&gt;", serviceNamespace, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty), settings);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:             &lt;span style="color: #008000"&gt;// Check for existence of queues on the fabric&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:             var qs = manager.GetQueues();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:             var result = from q &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; qs
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:                          where q.Path.Equals(queueName, StringComparison.OrdinalIgnoreCase)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:                          select q;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (result.Count() == 0)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:             {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;Queue does not exist&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19:                 &lt;span style="color: #008000"&gt;// Create Queue&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;Creating Queue...&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22:                 manager.CreateQueue(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; QueueDescription(queueName) { LockDuration = TimeSpan.FromSeconds(5.0d) });
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 23:                 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 24:             }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Runtime Operations&lt;/strong&gt;&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 815px; padding-right: 5px; height: 716px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1:             &lt;span style="color: #008000"&gt;// Create and Configure Messaging Factory to provision QueueClient&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:             MessagingFactorySettings messagingFactorySettings = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MessagingFactorySettings();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:             messagingFactorySettings.TokenProvider = settings.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuer, key);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:             MessagingFactory messagingFactory = MessagingFactory.Create(ServiceBusEnvironment.CreateServiceUri("&lt;span style="color: #8b0000"&gt;sb&lt;/span&gt;", serviceNamespace, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty), messagingFactorySettings);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:             
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:             QueueClient queueClient = messagingFactory.CreateQueueClient(queueName, ReceiveMode.PeekLock);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:             Order order = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Order();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:             order.OrderId = 42;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:             order.Products.Add("&lt;span style="color: #8b0000"&gt;Kinect&lt;/span&gt;", 70.50M);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:             order.Products.Add("&lt;span style="color: #8b0000"&gt;XBOX 360&lt;/span&gt;", 199.99M);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:             order.Total = order.Products["&lt;span style="color: #8b0000"&gt;Kinect&lt;/span&gt;"] + order.Products["&lt;span style="color: #8b0000"&gt;XBOX 360&lt;/span&gt;"];
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:             &lt;span style="color: #008000"&gt;// Create a Brokered Message from the Order object&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:             BrokeredMessage msg = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BrokeredMessage(order);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:             &lt;span style="color: #008000"&gt;/***********************
&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:             *** Send Operations  ***
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19:             ************************/
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21:             queueClient.Send(msg);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 23:             &lt;span style="color: #008000"&gt;/**************************
&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 24:              *** Receive Operations ***
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 25:             ***************************/
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 26:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 27:             BrokeredMessage recdMsg;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 28:             Order recdOrder;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 29: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 30:             &lt;span style="color: #008000"&gt;// Receive and lock message&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 31:             recdMsg = queueClient.Receive();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 32: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 33:             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(recdMsg != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 34:             {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 35:                 &lt;span style="color: #008000"&gt;// Convert from BrokeredMessage to native Order&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 36:                 recdOrder = recdMsg.GetBody&amp;lt;Order&amp;gt;();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 37: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 38:                 Console.ForegroundColor = ConsoleColor.Green;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 39:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;Received Order {0} \n\t with Message Id {1} \n\t and Lock Token:{2} \n\t from {3} \n\t with total of ${4}&lt;/span&gt;", recdOrder.OrderId, recdMsg.MessageId, recdMsg.LockToken, "&lt;span style="color: #8b0000"&gt;Receiver 1&lt;/span&gt;", recdOrder.Total);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 40:                 recdMsg.Complete();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 41:             }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 42:             queueClient.Close();&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Note that MessageSender and MessageReceiver are now optional. Here’s an example that shows PeekLocking a message, simulating an exception and trying again:&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 828px; padding-right: 5px; height: 533px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:             &lt;span style="color: #008000"&gt;// Alternate receive approach using agnostic MessageReceiver&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:             MessageReceiver receiver = messagingFactory.CreateMessageReceiver(queueName);            &lt;span style="color: #008000"&gt;// Recieve, complete, and delete message from the fabric&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:             &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:             {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:                 &lt;span style="color: #008000"&gt;// Receive and lock message&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:                 recdMsg = receiver.Receive();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:                 &lt;span style="color: #008000"&gt;// Convert from BrokeredMessage to native Order&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:                 recdOrder = recdMsg.GetBody&amp;lt;Order&amp;gt;();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:                 &lt;span style="color: #008000"&gt;// Complete read, release and delete message from the fabric&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:                 receiver.Complete(recdMsg.LockToken);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:                 Console.ForegroundColor = ConsoleColor.Green;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;Received Order {0} \n\t with Message Id {1} \n\t and Lock Token:{2} \n\t from {3} \n\t with total of ${4} \n\t at {5}&lt;/span&gt;", recdOrder.OrderId, recdMsg.MessageId, recdMsg.LockToken, "&lt;span style="color: #8b0000"&gt;Receiver 2&lt;/span&gt;", recdOrder.Total, DateTime.Now.Hour + "&lt;span style="color: #8b0000"&gt;:&lt;/span&gt;" + DateTime.Now.Minute + "&lt;span style="color: #8b0000"&gt;:&lt;/span&gt;" + DateTime.Now.Second);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:             }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19:             &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:             {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21:                 &lt;span style="color: #008000"&gt;// Should processing fail, release the lock from the fabric and make message available for later processing.&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22:                 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (recdMsg != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 23:                 {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 24:                     receiver.Abandon(recdMsg.LockToken);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 25:                     
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 26:                     Console.ForegroundColor = ConsoleColor.Red;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 27:                     Console.WriteLine("&lt;span style="color: #8b0000"&gt;Message could not be processed.&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 28: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 29:                 }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 30:             }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 31:             &lt;span style="color: #0000ff"&gt;finally&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 32:             {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 33:                 receiver.Close();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 34:             }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As shown below, this sample results in order 42 being received by the QueueClient:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-Queues--Topics-Rel_D1C0/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 2px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-Queues--Topics-Rel_D1C0/image_thumb.png" width="807" height="127" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Topics&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;&lt;b&gt;May/June CTP&lt;/b&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;&lt;b&gt;General Availability&lt;/b&gt;&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt;
        &lt;p&gt;&lt;b&gt;Comments&lt;/b&gt;&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;Topic&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;TopicDescription&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt;
        &lt;p&gt;In May/June CTP, Topic / Queue / Subscription were management objects. All create/delete operations were moved to NamespaceManager and the state operations are now on TopicDescription/QueueDescription etc.&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;TopicClient&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;TopicClient&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt;
        &lt;p&gt;As noted in the Queues section, you can use TopicClient or MessageSender in the event you want to abstract details of using Topics.&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;SubscriptionClient&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;SubscriptionClient&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt;
        &lt;p&gt;As noted in the Queues section, you can use SubscriptionClient or MessageReceiver in the event you want to abstract details of using a Topic/Subscription.&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;Subscription&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;SubscriptionDescription&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt;Changes to constructors and use of properties (see code samples below), but intent is the same.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;RuleDescription&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;RuleDescription&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt;Changes to constructors and use of properties (see code samples below), but intent is the same.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;FilterExpression&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;Filter&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt;
        &lt;p&gt;Base for Filter types such as SqlFilter&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;SqlFilterExpression&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;SqlFilter&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt; &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="268"&gt;
        &lt;p&gt;FilterAction&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="239"&gt;
        &lt;p&gt;RuleAction&lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="566"&gt; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Below is a representative sample for creating, configuring, sending and receiving a message on a topic:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Administrative Operations&lt;/strong&gt;&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 836px; padding-right: 5px; height: 632px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1:             &lt;span style="color: #008000"&gt;// Configure and create NamespaceManager for performing administrative operations&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:             NamespaceManagerSettings settings = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NamespaceManagerSettings();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:             settings.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuer, key);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:             NamespaceManager manager = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NamespaceManager(ServiceBusEnvironment.CreateServiceUri("&lt;span style="color: #8b0000"&gt;sb&lt;/span&gt;", serviceNamespace, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Empty), settings);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:             &lt;span style="color: #008000"&gt;// Check for existence of topics on the fabric&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:             var topics = manager.GetTopics();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:             var result = from t &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; topics
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:                          where t.Path.Equals(topicName, StringComparison.OrdinalIgnoreCase)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:                          select t;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (result.Count() == 0)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:             {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;Topic does not exist&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:                 &lt;span style="color: #008000"&gt;// Create Queue&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;Creating Topic...&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:                 TopicDescription topic = manager.CreateTopic(topicName);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21:             }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 23:             &lt;span style="color: #008000"&gt;// Create Subscriptions for InventoryServiceSubscription and CreditServiceSubscription and associate to OrdersTopic:&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 24:             SubscriptionDescription inventoryServiceSubscription = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SubscriptionDescription(topicName, "&lt;span style="color: #8b0000"&gt;InventoryServiceSubscription&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 25:             SubscriptionDescription creditServiceSubscription = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SubscriptionDescription(topicName, "&lt;span style="color: #8b0000"&gt;CreditServiceSubscription&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 26: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 27: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 28:             &lt;span style="color: #008000"&gt;// Set up Filters for NorthAmericaFulfillmentServiceSubscription&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 29:             RuleDescription northAmericafulfillmentRuleDescription = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RuleDescription();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 30:             northAmericafulfillmentRuleDescription.Filter = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlFilter("&lt;span style="color: #8b0000"&gt;CountryOfOrigin = 'USA' OR CountryOfOrigin ='Canada' OR CountryOfOrgin ='Mexico'&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 31:             northAmericafulfillmentRuleDescription.Action = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlRuleAction("&lt;span style="color: #8b0000"&gt;set FulfillmentRegion='North America'&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 32: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 33: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 34:             &lt;span style="color: #008000"&gt;// Create Subscriptions&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 35:             SubscriptionDescription northAmericaFulfillmentServiceSubscription = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SubscriptionDescription(topicName, "&lt;span style="color: #8b0000"&gt;NorthAmericaFulfillmentServiceSubscription&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 36: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 37:             &lt;span style="color: #008000"&gt;// Delete existing subscriptions&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 38:             &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; { manager.DeleteSubscription(topicName, inventoryServiceSubscription.Name); } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; { };
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 39:             &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; { manager.DeleteSubscription(topicName, creditServiceSubscription.Name); } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; { };
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 40:             &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; { manager.DeleteSubscription(topicName, northAmericaFulfillmentServiceSubscription.Name); } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; { };
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 41: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 42:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 43:             &lt;span style="color: #008000"&gt;// Add Subscriptions and Rules to Topic&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 44:             manager.CreateSubscription(inventoryServiceSubscription);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 45:             manager.CreateSubscription(creditServiceSubscription);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 46:             manager.CreateSubscription(northAmericaFulfillmentServiceSubscription, northAmericafulfillmentRuleDescription);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 47:             &lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime Operations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 842px; padding-right: 5px; height: 631px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1:             &lt;span style="color: #008000"&gt;// Create and Configure Messaging Factory to provision TopicClient&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:             MessagingFactorySettings runtimeSettings = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MessagingFactorySettings();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:             runtimeSettings.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuer, key);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:             MessagingFactory messagingFactory = MessagingFactory.Create(ServiceBusEnvironment.CreateServiceUri("&lt;span style="color: #8b0000"&gt;sb&lt;/span&gt;",serviceNamespace,String.Empty),runtimeSettings);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:             
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:             &lt;span style="color: #008000"&gt;// Create Topic Client for sending messages to the Topic:&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:             TopicClient client = messagingFactory.CreateTopicClient(topicName);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:          
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:             &lt;span style="color: #008000"&gt;/***********************
&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:              *** Send Operations ***
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:              ***********************/
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:             &lt;span style="color: #008000"&gt;// Prepare BrokeredMessage and corresponding properties&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:             Order order = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Order();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:             order.OrderId = 42;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:             order.Products.Add("&lt;span style="color: #8b0000"&gt;Kinect&lt;/span&gt;", 70.50M);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:             order.Products.Add("&lt;span style="color: #8b0000"&gt;XBOX 360&lt;/span&gt;", 199.99M);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:             order.Total = order.Products["&lt;span style="color: #8b0000"&gt;Kinect&lt;/span&gt;"] + order.Products["&lt;span style="color: #8b0000"&gt;XBOX 360&lt;/span&gt;"];
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:             &lt;span style="color: #008000"&gt;// Set the body to the Order data contract&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21:             BrokeredMessage msg = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BrokeredMessage(order);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 23:             &lt;span style="color: #008000"&gt;// Set properties for use in RuleDescription&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 24:             msg.Properties.Add("&lt;span style="color: #8b0000"&gt;CountryOfOrigin&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;USA&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 25:             msg.Properties.Add("&lt;span style="color: #8b0000"&gt;FulfillmentRegion&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 26:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 27:             &lt;span style="color: #008000"&gt;// Send the message to the OrdersTopic&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 28:             client.Send(msg);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 29:             client.Close();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 30:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 31:            &lt;span style="color: #008000"&gt;/**************************
&lt;/span&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 32:              *** Receive Operations ***
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 33:            ****************************/
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 34:         
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 35:             BrokeredMessage recdMsg;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 36:             Order recdOrder;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 37: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 38:             &lt;span style="color: #008000"&gt;// Inventory Service Subscriber&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 39:             SubscriptionClient inventoryServiceSubscriber = messagingFactory.CreateSubscriptionClient(topicName, "&lt;span style="color: #8b0000"&gt;InventoryServiceSubscription&lt;/span&gt;",ReceiveMode.PeekLock);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 40:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 41:             &lt;span style="color: #008000"&gt;// Read the message from the OrdersTopic&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 42:             &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; ((recdMsg = inventoryServiceSubscriber.Receive(TimeSpan.FromSeconds(5))) != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 43:             {   
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 44:                 &lt;span style="color: #008000"&gt;// Convert from BrokeredMessage to native Order&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 45:                 recdOrder = recdMsg.GetBody&amp;lt;Order&amp;gt;();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 46: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 47:                 &lt;span style="color: #008000"&gt;// Complete read, release and delete message from the fabric&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 48:                 inventoryServiceSubscriber.Complete(recdMsg.LockToken);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 49: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 50:                 Console.ForegroundColor = ConsoleColor.Green;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 51:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;Received Order {0} \n\t on {1} \n\t with Message Id {2} \n\t and Lock Token {3}.&lt;/span&gt;", recdOrder.OrderId, "&lt;span style="color: #8b0000"&gt;Inventory Service Subscriber&lt;/span&gt;", recdMsg.MessageId, recdMsg.LockToken);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 52:             }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 53:             inventoryServiceSubscriber.Close();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 54: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 55:             &lt;span style="color: #008000"&gt;// Credit Service Subscriber&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 56:             SubscriptionClient creditServiceSubscriber = messagingFactory.CreateSubscriptionClient(topicName, "&lt;span style="color: #8b0000"&gt;CreditServiceSubscription&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 57: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 58:             &lt;span style="color: #008000"&gt;// Read the message from the OrdersTopic&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 59:             recdMsg = creditServiceSubscriber.Receive();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 60: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 61:             &lt;span style="color: #008000"&gt;// Convert from BrokeredMessage to native Order&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 62:             recdOrder = recdMsg.GetBody&amp;lt;Order&amp;gt;();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 63: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 64:             &lt;span style="color: #008000"&gt;// Complete read, release and delete message from the fabric&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 65:             creditServiceSubscriber.Complete(recdMsg.LockToken);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 66: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 67:             Console.ForegroundColor = ConsoleColor.Green;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 68:             Console.WriteLine("&lt;span style="color: #8b0000"&gt;Received Order {0} \n\t on {1} \n\t with Message Id {2} \n\t and Lock Token {3}.&lt;/span&gt;", recdOrder.OrderId, "&lt;span style="color: #8b0000"&gt;Credit Service Subscriber&lt;/span&gt;", recdMsg.MessageId, recdMsg.LockToken);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 69: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 70:             creditServiceSubscriber.Close();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 71: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 72:             &lt;span style="color: #008000"&gt;// Fulfillment Service Subscriber for the North America Fulfillment Service Subscription&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 73:             SubscriptionClient northAmericaFulfillmentServiceSubscriber = messagingFactory.CreateSubscriptionClient(topicName, "&lt;span style="color: #8b0000"&gt;northAmericaFulfillmentServiceSubscription&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 74:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 75:             &lt;span style="color: #008000"&gt;// Read the message from the OrdersTopic for the North America Fulfillment Service Subscription&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 76:             recdMsg = northAmericaFulfillmentServiceSubscriber.Receive(TimeSpan.FromSeconds(5));
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 77: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 78:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 79:            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(recdMsg != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 80:             {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 81:                 &lt;span style="color: #008000"&gt;// Convert from BrokeredMessage to native Order&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 82:                 recdOrder = recdMsg.GetBody&amp;lt;Order&amp;gt;();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 83: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 84:                 &lt;span style="color: #008000"&gt;// Complete read, release and delete message from the fabric&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 85:                 northAmericaFulfillmentServiceSubscriber.Complete(recdMsg.LockToken);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 86: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 87:                 Console.ForegroundColor = ConsoleColor.Green;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 88:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;Received Order {0} \n\t on {1} \n\t with Message Id {2} \n\t and Lock Token {3}.&lt;/span&gt;", recdOrder.OrderId, "&lt;span style="color: #8b0000"&gt;North America Fulfillment Service Subscriber&lt;/span&gt;", recdMsg.MessageId, recdMsg.LockToken);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 89:             }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 90:             &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 91:             {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 92:                 Console.ForegroundColor = ConsoleColor.Yellow;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 93:                 Console.WriteLine("&lt;span style="color: #8b0000"&gt;No messages for North America found.&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 94:             }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 95:             
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 96:             northAmericaFulfillmentServiceSubscriber.Close();&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When running this sample, you’ll see that I have received Order 42 on my Inventory, Credit and North America Fulfillment Service subscriptions:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-Queues--Topics-Rel_D1C0/image_6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 2px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-Queues--Topics-Rel_D1C0/image_thumb_2.png" width="802" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;WCF&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the great things about the WCF programming model is that it abstracts much of the underlying communication details and as such, other than dropping in a new assembly and and refactoring the binding and configuration, it is not greatly affected by the API changes from the May/June CTP to GA.&lt;/p&gt;

&lt;p&gt;As I mentioned, one thing that has changed is that the ServiceBusMessagingBinding has been renamed to NetMessagingBinding. I’ll be covering and end to end example of using the NetMessagingBinding in my upcoming article in &lt;a href="http://www.code-magazine.com/SearchResults.aspx?search=garibay" target="_blank"&gt;CODE Magazine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;REST API&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The REST API is key to delivering these new capabilities across a variety of client platforms and remains largely unchanged, however one key change is how message properties are handled. Instead of individual headers for each, there is now one header with  all the properties JSON encoded. Please refer to the updated REST API Reference doc for details. I’ll also be covering and end-to-end example of using the REST API to write an read to/from a queue in my upcoming article in &lt;a href="http://www.code-magazine.com/SearchResults.aspx?search=garibay" target="_blank"&gt;CODE Magazine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;More Coming Soon&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As I mentioned, in my upcoming article in &lt;a href="http://www.code-magazine.com/SearchResults.aspx?search=garibay" target="_blank"&gt;CODE Magazine&lt;/a&gt;, I’ll cover the Why, What, and How behind Azure AppFabric Service Bus Brokered Messaging including end to end walkthroughs with the .NET Client API, REST API and WCF Binding. The November/December issue should be on newsstands (including Barnes and Noble) or your mailbox towards the end of October. You can also find the article online at &lt;a href="http://code-magazine.com"&gt;http://code-magazine.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;Resources&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can learn more about this exciting release as well as download the GA SDK version 1.5 by visiting the following resources:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Azure AppFabric SDK 1.5:&lt;a title="http://www.microsoft.com/download/en/details.aspx?id=27421" href="http://www.microsoft.com/download/en/details.aspx?id=27421"&gt;http://www.microsoft.com/download/en/details.aspx?id=27421&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://twitter.com/clemensv" target="_blank"&gt;Clemens Vasters&lt;/a&gt; on the May CTP: &lt;a title="http://vasters.com/clemensv/2011/05/16/Introducing+The+Windows+Azure+AppFabric+Service+Bus+May+2011+CTP.aspx" href="http://vasters.com/clemensv/2011/05/16/Introducing+The+Windows+Azure+AppFabric+Service+Bus+May+2011+CTP.aspx"&gt;http://vasters.com/clemensv/2011/05/16/Introducing+The+Windows+Azure+AppFabric+Service+Bus+May+2011+CTP.aspx&lt;/a&gt;  &lt;/li&gt;

  &lt;li&gt;Great video by &lt;a href="http://twitter.com/clemensv" target="_blank"&gt;Clemens Vasters&lt;/a&gt; on Brokered Messaging: &lt;a title="http://vasters.com/clemensv/2011/06/11/Understanding+Windows+Azure+AppFabric+Queues+And+Topics.aspx" href="http://vasters.com/clemensv/2011/06/11/Understanding+Windows+Azure+AppFabric+Queues+And+Topics.aspx"&gt;http://vasters.com/clemensv/2011/06/11/Understanding+Windows+Azure+AppFabric+Queues+And+Topics.aspx&lt;/a&gt;  &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://twitter.com/#!/dingha" target="_blank"&gt;David Ingham&lt;/a&gt; on Queues: &lt;a title="http://blogs.msdn.com//b/appfabric/archive/2011/05/17/an-introduction-to-service-bus-queues.aspx" href="http://blogs.msdn.com//b/appfabric/archive/2011/05/17/an-introduction-to-service-bus-queues.aspx"&gt;http://blogs.msdn.com//b/appfabric/archive/2011/05/17/an-introduction-to-service-bus-queues.aspx&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://twitter.com/#!/dingha" target="_blank"&gt;David Ingham&lt;/a&gt; on Topics: &lt;a title="http://blogs.msdn.com//b/appfabric/archive/2011/05/25/an-introduction-to-service-bus-topics.aspx" href="http://blogs.msdn.com//b/appfabric/archive/2011/05/25/an-introduction-to-service-bus-topics.aspx"&gt;http://blogs.msdn.com//b/appfabric/archive/2011/05/25/an-introduction-to-service-bus-topics.aspx&lt;/a&gt;  &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://twitter.com/rickggaribay" target="_blank"&gt;My&lt;/a&gt; Introduction to Queues: &lt;a title="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx" href="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx"&gt;http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx&lt;/a&gt;  &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://twitter.com/rickggaribay" target="_blank"&gt;My&lt;/a&gt; Introduction to Topics:&lt;a title="http://rickgaribay.net/archive/2011/05/31/exploring-appfabric-service-bus-v2-may-ctp-topics.aspx" href="http://rickgaribay.net/archive/2011/05/31/exploring-appfabric-service-bus-v2-may-ctp-topics.aspx"&gt;http://rickgaribay.net/archive/2011/05/31/exploring-appfabric-service-bus-v2-may-ctp-topics.aspx&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://rickgaribay.net/aggbug/315.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2011/09/14/azure-appfabric-service-bus-brokered-messaging-ga-amp-rude-ctp.aspx</guid>
            <pubDate>Wed, 14 Sep 2011 16:46:52 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2011/09/14/azure-appfabric-service-bus-brokered-messaging-ga-amp-rude-ctp.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/315.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/315.aspx</trackback:ping>
        </item>
        <item>
            <title>String Comparison Gotcha</title>
            <link>http://rickgaribay.net/archive/2011/08/10/string-comparison-gotcha.aspx</link>
            <description>&lt;p&gt;I was burning the midnight oil last night writing some samples for a project I’m working on with Azure AppFabric Service Bus Queues and Topics. In short, I was modifying some existing code I had written to defensively check for the existence of a queue so that I could avoiding entity conflicts when attempting to create the same queue name twice.&lt;/p&gt;  &lt;p&gt;Given a queueName of “Orders”, the first thing I did was to check to see if it exists by using the Client API along with a very simple LINQ query:&lt;/p&gt;  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: var qs = namespaceClient.GetQueues();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: var result = from q &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; qs
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: where q.Path == queueName
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: select q;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;If the result came back as empty, I’d go ahead and create the queue:&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (result.Count() == 0)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:      Console.WriteLine("&lt;span style="color: #8b0000"&gt;Queue does not exist&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:     &lt;span style="color: #008000"&gt;// Create Queue&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     Console.WriteLine("&lt;span style="color: #8b0000"&gt;Creating Queue...&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     Queue queue = namespaceClient.CreateQueue(queueName);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;This code worked fine the first time, since the queue did not exist, but the next time I ran the code, and each time following, Line 10 above would execute each time because the result.Count() was always zero.&lt;/p&gt;

&lt;p&gt;Looking at the queue properties, it was clear that the queue name was stored in lower case, regardless of the case used in my queueName variable:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/String-Comparison-Gotcha_CC39/image_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 2px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/String-Comparison-Gotcha_CC39/image_thumb_1.png" width="644" height="197" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the surface, this created an interesting dilemma: Even though case didn’t matter when creating the queue, when I was searching for the queue name in Line 5 of my LINQ query, it was always resulting in a false match. Could this be a bug?&lt;/p&gt;

&lt;p&gt;My first thought was to go back and make queueName lowercase, changing to “orders”. This fixed the problem on the surface, but it felt dirty and fragile.&lt;/p&gt;

&lt;p&gt;After reviewing the code with some colleagues (thanks &lt;a href="http://twitter.com/clemensv"&gt;@clemensv&lt;/a&gt; and &lt;a href="http://twitter.com/briannoyes"&gt;@briannoyes&lt;/a&gt;) it turns out that I had made an esoteric, but key error when checking for equality of the queue path:&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;where q.Path == queueName&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;The full explanation is available on the C&lt;a href="http://msdn.microsoft.com/en-us/library/cc165449.aspx"&gt;# Programming Guide on MSDN&lt;/a&gt;, but in a nutshell, I had made the error of using the “==” operator to check for equality. From MSDN: “Use basic ordinal comparisons when you have to compare or sort the values of two strings without regard to linguistic conventions. A basic ordinal comparison (System.StringComparison.Ordinal) is case-sensitive, which means that the two strings must match character for character: "and" does not equal "And" or "AND".”&lt;/p&gt;

&lt;p&gt;The solution was to modify the where clause to use the Equals method which takes the object you are comparing to along with a StringComparison rule of StringComparison.OrdinalIgnoreCase:&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: var result = from q &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; qs
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:      where q.Path.Equals(queueName,StringComparison.OrdinalIgnoreCase)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: select q;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Explanation from MSDN: “A frequently-used variation is System.StringComparison.OrdinalIgnoreCase, which will match "and", "And", and "AND". StringComparison.OrdinalIgnoreCase is often used to compare file names, path names, network paths, and any other string whose value does not change based on the locale of the user's computer.”&lt;/p&gt;

&lt;p&gt;The AppFabric team is doing exactly the right thing since the queue path corresponds to a network path.&lt;/p&gt;

&lt;p&gt;Here is the full code, which allows me to check for the existence of the queue path ensuring that I am ignoring case and the rest is as it was:&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: var qs = namespaceClient.GetQueues();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: var result = from q &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; qs
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:              where q.Path.Equals(queueName,StringComparison.OrdinalIgnoreCase)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:              select q;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:             
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (result.Count() == 0)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8: {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:    Console.WriteLine("&lt;span style="color: #8b0000"&gt;Queue does not exist&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:    &lt;span style="color: #008000"&gt;// Create Queue&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:    Console.WriteLine("&lt;span style="color: #8b0000"&gt;Creating Queue...&lt;/span&gt;");
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:    Queue queue = namespaceClient.CreateQueue(queueName);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;When you’ve been programming for a while, it’s sometimes easy to forget the little things, and it is often the least obvious things that create the nastiest bugs.  &lt;/p&gt;

&lt;p&gt;Hope this saves someone else from having a Doh! moment like I did &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/String-Comparison-Gotcha_CC39/wlEmoticon-smile_2.png" /&gt;&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/312.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2011/08/10/string-comparison-gotcha.aspx</guid>
            <pubDate>Wed, 10 Aug 2011 23:08:34 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2011/08/10/string-comparison-gotcha.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/312.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/312.aspx</trackback:ping>
        </item>
        <item>
            <title>More on AppFabric Service Bus V2 Topics</title>
            <link>http://rickgaribay.net/archive/2011/06/08/more-on-appfabric-service-bus-v2-topics.aspx</link>
            <description>&lt;p&gt;I came across a great write up on AppFabric Service Bus Topics by &lt;a href="http://twitter.com/dingha"&gt;@dingha&lt;/a&gt;, PM on the AppFabric team: &lt;a title="http://daveingham.typepad.com/blog/2011/05/an-introduction-to-service-bus-topics.html" href="http://daveingham.typepad.com/blog/2011/05/an-introduction-to-service-bus-topics.html"&gt;http://daveingham.typepad.com/blog/2011/05/an-introduction-to-service-bus-topics.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note, the shared POS domain between his post and mine is purely coincidental. Long live YAPO demos!&lt;/p&gt;  &lt;p&gt;If you don’t already, take a moment to &lt;a href="http://twitter.com/dingha"&gt;follow David&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/310.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2011/06/08/more-on-appfabric-service-bus-v2-topics.aspx</guid>
            <pubDate>Wed, 08 Jun 2011 18:04:50 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2011/06/08/more-on-appfabric-service-bus-v2-topics.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/310.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/310.aspx</trackback:ping>
        </item>
        <item>
            <title>Exploring AppFabric Service Bus V2 May CTP: Topics</title>
            <link>http://rickgaribay.net/archive/2011/05/31/exploring-appfabric-service-bus-v2-may-ctp-topics.aspx</link>
            <description>&lt;p&gt;In my previous &lt;a href="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx"&gt;post&lt;/a&gt;, I discussed Azure &lt;a href="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx"&gt;AppFabric Service Bus Queues&lt;/a&gt;, a key new capability in the first CTP of the Azure AppFabric Service Bus V2 release that was &lt;a href="http://blogs.msdn.com/b/appfabric/archive/2011/05/14/announcing-the-windows-azure-appfabric-ctp-may-and-june-releases.aspx"&gt;announced&lt;/a&gt; on May 17th.&lt;/p&gt;  &lt;p&gt;Queues are an important addition to Azure AppFabric Service Bus capabilities because they provide a solid foundation on which to build loosely coupled distributed messaging solutions. The natural decoupling of queues introduces a number of natural side effects that can further benefit non-functional quality attributes of your solution such as performance, scalability and availability. &lt;/p&gt;  &lt;p&gt;The graphic on the right is taken from my recent whitepaper &lt;a href="http://www.microsoft.com/en-us/cloud/developer/resource.aspx?resourceId=developing-and-extending-apps&amp;amp;fbid=JznnsphSt83"&gt;“Developing and Extending Apps for Windows Azure with Visual Studio”&lt;/a&gt;&lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_thumb.png" width="240" height="166" /&gt;&lt;/a&gt; and shows the perpetual mismatch of supply and demand of IT capacities. If we think of this mismatch as load on the Y axis being introduced over time, the result is either failure to deliver a service or spending too much on hardware. &lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_thumb_1.png" width="240" height="175" /&gt;&lt;/a&gt;The goal, then is to align the demand with capacity. &lt;/p&gt;  &lt;p&gt;Queues allow us to get closer to the drawing on the left because capacity can be tuned to scale as needed and at its own pace. This is effective because with queues, a consumer/worker can be throttled to only consume what it can handle. If the consumer/worker is offline, items in the queue will queue up, providing classic “store and forward” capabilities. If the consumer/worker is very busy, it will only consume the messages it is able to reliably pull from the queue. If we add more consumers/workers, each consumer/worker will consume messages at its optimal rate (determined by processing capacity, tuning, etc.), resulting in a natural distribution of work. Of course, stronger, more capable consumers/workers may consume more messages, but as long as there are messages in the queue, there is work to be done and the capacity can be allocated accordingly.&lt;/p&gt;  &lt;p&gt;As you can see, queues are a great pattern for building loosely coupled distributed solutions, and the ability to add consumers/workers to a process or message exchange in a manner that is transparent from the client/producer perspective makes queues even more useful. &lt;/p&gt;  &lt;p&gt;This is the idea behind topics. Before I dive into topics though, let’s talk about the problem that topics are trying to solve.&lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_8.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px 2px 2px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_thumb_3.png" width="123" height="192" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_6.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 2px 5px 2px 2px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_thumb_2.png" width="123" height="179" /&gt;&lt;/a&gt;In distributed systems, it is useful to design message exchanges in terms of publishers and subscribers. Publishers are clients that are either sending a request-response message and will wait for a response; or are sending a single, one way message and expect no response. Subscribers care about these messages for one reason or another and thus subscribe to these messages. This is the essence of the Publish-Subscribe, or more succinct “Pub-Sub” messaging pattern. A one-way pub-sub  message exchange pattern is modeled to my left, and again to my right to build on a concrete example. Purchases, be they on-line or at brick-and-mortar retail outlets typically involve a point-of-sale (POS) system. &lt;/p&gt;  &lt;p&gt;One of the first things a smart, modern POS software does when a unit is sold is to update inventory on that product so that the company can make proactive, intelligent decisions about managing inventory levels. In most cases, this is an administrative function, that is (or should be) transparent to the customer. When an order/sale is placed, an event occurs which is of interest to an Inventory Service that is responsible for decrementing the inventory count on a shared store. Of course, this is just one of several things that likely need to happen when an order is placed. Credit card authorization as well as fulfillment (whatever that means in the context of the purchase) needs to take place as shown below on your left. &lt;/p&gt;  &lt;p&gt;All of a sudden things are more complex than they were before. I want to decouple the POS Client from the downstream business of authorizing a credit card and shipping the product to the customer’s doorstep. Depending on the context, the credit authorization process may be request-response or one-way. For most high-volume online retailers, the financial outcome of &lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_10.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 5px 5px 2px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_thumb_4.png" width="323" height="157" /&gt;&lt;/a&gt;the transaction is transparent to the purchasing experience. Ever gotten an email from Amazon.com after you made your purchase letting you know that your order is in a pending state because you need to update your expiration date on file so it can authorize your credit card? This asynchronous approach is common to facilitate scale and performance, and it is also good business. &lt;/p&gt;  &lt;p&gt;It is very important to note that when the credit card authorization is designed as one-way, there are a number of guarantees that must be made. First, the Credit Service &lt;em&gt;must&lt;/em&gt; receive the message, no matter how busy the front-end or back-end services are. Second, but of equal importance, is that the Credit Service &lt;em&gt;must&lt;/em&gt; receive the message &lt;em&gt;once and only once. &lt;/em&gt;Failure to deliver on the first or second guarantee will lead to lost revenue, either due to lost transactions or very disgruntled customers.&lt;/p&gt;  &lt;p&gt;Using queues is a first step towards achieving these desired outcomes. However, now we need to reason about who should have the responsibility of sending the message to each subscriber? It can’t be the POS Client, because we want to decouple it from this kind of intimate knowledge. Adding this responsibility to each subscriber is also just as bad, or arguably worse. &lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_12.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_thumb_5.png" width="250" height="249" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What we need is an intermediary that forms both a logical and physical relationship between publishers and subscribers such that the minimum degree of coupling is accomplished between the two and no more. This is exactly what a topic provides. &lt;/p&gt;  &lt;p&gt;Topics are nothing new. They have been the mainstay of JMS-based systems for years, and thus have proven their usefulness in the field of distributed computing as a great way to logically associate actions to events, thus achieving pub-sub in a minimally coupled manner. &lt;/p&gt;  &lt;p&gt;In our scenario, when a sale occurs, the POS Client publishes a message to the “Orders” topic to signal a new order event. At this point, corresponding subscribers are notified by the topic. This logical relationship is modeled to your right. Each one of the subscribers might receive a copy of the same message, in which case we would define the message exchange pattern as multi-cast. It is also possible-and likely- that each service exposes a different contract and thus, transformation between a canonical message and the expected message must take place, but this is a subject for a later post.&lt;/p&gt;  &lt;p&gt;How the subscribers receive the message, be it one-way or request-response, is a physical implementation decision. In the classic sense, the logical abstraction of a topic affords us some latitude in choosing a physical transport that will fuse the publisher and subscriber(s) together.  &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; Theory aside, everything I am sharing here is based on my experience over the last few days jumping into these early bits. I am not an expert on the implementation of these capabilities or the features of the CTP and am merely sharing my learnings and thoughts as I explore these exciting new features. If you have questions, know of a different or better way to do something as it applies to the CTP, or have any any corrections, please use the comments below and I’ll gladly consider them and/or share them with the product team and post updates back here.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Exploring Azure AppFabric Service Bus V2&lt;/strong&gt; Topics&lt;/p&gt;  &lt;p&gt;In Azure AppFabric Service Bus V2, the physical transport used in Topics is Azure AppFabric Service Bus Queues, which allows us to harness the physical advantages of queues and the logical abstraction that topics provide to design our distributed solutions at internet scale.&lt;/p&gt;  &lt;p&gt;If you’ve played with the Azure AppFabric Service Bus Queues, or read my &lt;a href="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx"&gt;introduction to this series&lt;/a&gt; you might be wondering what makes Azure AppFabric Service Bus Topic so special. So far, you might be thinking that we could accomplish much of what I’ve discussed with Queues and you wouldn’t be alone. I struggled with this initially as well. &lt;/p&gt;  &lt;p&gt;The way that Queues and Topics are implemented in the current technology preview, Topics don’t really seem all that useful until you want to refine &lt;em&gt;when &lt;/em&gt;or under &lt;em&gt;what conditions &lt;/em&gt;a Subscriber should receive a message beyond simply being subscribed to a Topic, and this can be pretty powerful.&lt;/p&gt;  &lt;p&gt;In fact, we can code the scenario shown in the &lt;a href="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx"&gt;article on Queues&lt;/a&gt; to be functionally equivalent with Topics without immediately gaining much.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Creating&lt;/strong&gt; &lt;strong&gt;Topics&lt;/strong&gt; &lt;strong&gt;and Subscriptions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Start by creating a ServiceBusNamespaceClient and MessagingFactory just as before:&lt;/p&gt;  &lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: ServiceBusNamespaceClient namespaceClient = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; ServiceBusNamespaceClient( &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:         ServiceBusEnvironment.CreateServiceUri( &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:         "&lt;span style="color: rgb(139,0,0)"&gt;sb&lt;/span&gt;", serviceNamespace,  &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:         &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.Empty),  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:         sharedSecretCreds); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: MessagingFactory messagingFactory = MessagingFactory.Create( &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     ServiceBusEnvironment.CreateServiceUri( &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:     "&lt;span style="color: rgb(139,0,0)"&gt;sb&lt;/span&gt;",  &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     serviceNamespace,  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:     &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;.Empty), &lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Next, create a Topic called “Orders”: &lt;/p&gt;

&lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: Topic ordersTopic = namespaceClient.CreateTopic("&lt;span style="color: rgb(139,0,0)"&gt;Orders&lt;/span&gt;");&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;The underlying queue infrastructure is created for you.&lt;/p&gt;

&lt;p&gt;Now, create a subscription for the Inventory Service on the “Orders” topic:&lt;/p&gt;

&lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: Subscription inventoryServiceSubscription = ordersTopic.AddSubscription("&lt;span style="color: rgb(139,0,0)"&gt;InventoryServiceSubscription&lt;/span&gt;");&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;At this point, the creation of the Topic and Subscription above would take place in a management context without regard to, or any knowledge of the actual publisher or subscriber(s). &lt;/p&gt;

&lt;p&gt;I would expect tooling either from Microsoft or the community or both to start to crop up soon to provide a user experience for these types of management chores, including the ability to enumerate Queues, &lt;b style="background-color: #a0ffff; color: black"&gt;Topics&lt;/b&gt;, etc. For example, before I create a Topic, I need to ensure that the Topic doesn’t already exist or I will get an &lt;a href="http://twitter.com/#!/rickggaribay/status/74226182958227457"&gt;MessagingEntityAlreadyExistsException&lt;/a&gt;. I used the GetQueues method on the namespace client, and if the Topic or Queue entity exists, use the DeleteQueue or DeleteTopic method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Publishing on a Topic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, the client/publisher creates a TopicClient and MessageSender and sends the message on the Orders Topic:&lt;/p&gt;

&lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: TopicClient pOSClientPublisher = messagingFactory.CreateTopicClient("&lt;span style="color: rgb(139,0,0)"&gt;Orders&lt;/span&gt;"); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: MessageSender msgSender = pOSClientPublisher.CreateSender(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: Order order = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; Order(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: order.OrderId = 42; &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: order.Products.Add("&lt;span style="color: rgb(139,0,0)"&gt;Kinect&lt;/span&gt;", 70.50M); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8: order.Products.Add("&lt;span style="color: rgb(139,0,0)"&gt;SamsungFocus&lt;/span&gt;", 199.99M); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9: order.Total = order.Products["&lt;span style="color: rgb(139,0,0)"&gt;Kinect&lt;/span&gt;"] + order.Products["&lt;span style="color: rgb(139,0,0)"&gt;SamsungFocus&lt;/span&gt;"]; &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11: var msg = BrokeredMessage.CreateMessage(order); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:             &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13: msgSender.Send(msg); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14: msgSender.Close();&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Note that the client/publisher knows nothing about the subscriber. It is only bound to a logical Topic called “Orders” on line 1 above. It is running in some other process somewhere in the world (literally) that has an internet connection and can make an outbound connection on TCP port 9354***.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subscribing to a Topic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the receiving end, a SubscriptionClient is created along with a MessageReciever. The SubscriptionClient instance is created from the MessagingFactory instance which accepts the name of the topic and the subscription itself.&lt;/p&gt;

&lt;p&gt;Note the RecieveMode is the same as before which will have the effect of ensuring that the Inventory Service Subscriber receives the message at most once (FWIW, I think PublisherClient and SubscriberClient make more sense that SubscriptionClient and TopicClient respectively, but the intent of the classes is pretty clear and again, these are early bits so expect changes as the team gets feedback and continues to bake the API):&lt;/p&gt;

&lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: SubscriptionClient inventoryServiceSubscriber = messagingFactory.CreateSubscriptionClient("&lt;span style="color: rgb(139,0,0)"&gt;Orders&lt;/span&gt;", "&lt;span style="color: rgb(139,0,0)"&gt;InventoryServiceSubscription&lt;/span&gt;"); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:              &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: MessageReceiver msgReceiver = inventoryServiceSubscriber.CreateReceiver(ReceiveMode.PeekLock); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: var recdMsg = msgReceiver.Receive(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: msgReceiver.Close(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8: var recdOrder = recdMsg.GetBody&amp;lt;Order&amp;gt;(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10: Console.WriteLine("&lt;span style="color: rgb(139,0,0)"&gt;Received Order {0} on {1}.&lt;/span&gt;", recdOrder.OrderId, "&lt;span style="color: rgb(139,0,0)"&gt;Inventory Service Subscriber&lt;/span&gt;");&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;The code above would be wrapped into a polling algorithm that allows you to have fine control over the polling interval, which as Clemens Vasters pointed out in a side conversation recently is a key capability that allows you to throttle your subscribers. The samples in the SDK show a polling technique which works, but it would be nice to see an option for setting some config and letting the API do this for you. &lt;/p&gt;

&lt;p&gt;Regardless of the approach you take to checking for messages, the only thing the subscriber knows about is the Topic name and the name of the subscription on line 1 above (having to provide the subscription name in addition to the topic name, seems a bit redundant to me and more coupling than is needed). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multiple Subscribers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At this point, we’ve emulated the functionality of the &lt;a href="http://rickgaribay.net/archive/2011/05/17/appfabric-service-bus-v2-ctp.aspx"&gt;Queuing example shown in my first post in the series&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While we’ve increased our level of abstraction, and are no longer thinking about (or care) about the fact that there’s a queue in between the publisher and subscriber, so far, topics haven’t bought us much just yet…&lt;/p&gt;

&lt;p&gt;Think back to the scenario above. There are two other services that care about orders. We can create subscriptions for them just as we did for the Inventory Service at management/configuration time:&lt;/p&gt;

&lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: Subscription fulfillmentServiceSubscription = ordersTopic.AddSubscription("&lt;span style="color: rgb(139,0,0)"&gt;FulfillmentServiceSubscription&lt;/span&gt;"); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: Subscription creditServiceSubscription = ordersTopic.AddSubscription("&lt;span style="color: rgb(139,0,0)"&gt;CreditServiceSubscription&lt;/span&gt;");&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Of course, new subscriptions can be added long after the Topic has been created, and this is one of the many powerful aspects of this logical abstraction from publishers and subscribers. This approach introduces agility into your solutions because you can add subscribers with minimal friction, and in a fully location transparent manner.&lt;/p&gt;

&lt;p&gt;As with the publisher (TopicClient), subscribers (SubscriberClients) live in their own process anywhere in the world with an internet connection and can be fired up at will. If one is offline, or unavailable, the message will be queued (provided that previous subscribers have peeked the message (ReceiveMode.PeekLock) as opposed to popping it off the queue (ReceiveMode.ReceiveAndDelete). Below is the simple code for adding listeners/Subscribers for the Credit Service and Fulfillment Service:&lt;/p&gt;

&lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: // Credit Service Subscriber &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: SubscriptionClient creditServiceSubscriber = messagingFactory.CreateSubscriptionClient("&lt;span style="color: rgb(139,0,0)"&gt;Orders&lt;/span&gt;", "&lt;span style="color: rgb(139,0,0)"&gt;CreditServiceSubscription&lt;/span&gt;"); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: msgReceiver = creditServiceSubscriber.CreateReceiver(ReceiveMode.PeekLock); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: recdMsg = msgReceiver.Receive(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: msgReceiver.Close(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8: recdOrder = recdMsg.GetBody&amp;lt;Order&amp;gt;(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10: Console.WriteLine("&lt;span style="color: rgb(139,0,0)"&gt;Received Order {0} on {1}.&lt;/span&gt;", recdOrder.OrderId, "&lt;span style="color: rgb(139,0,0)"&gt;Credit Service Subscriber&lt;/span&gt;"); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12: // Fulfillment Service Subscriber &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13: SubscriptionClient fulfillmentServiceSubscriber = messagingFactory.CreateSubscriptionClient("&lt;span style="color: rgb(139,0,0)"&gt;Orders&lt;/span&gt;", "&lt;span style="color: rgb(139,0,0)"&gt;FulfillmentServiceSubscription&lt;/span&gt;"); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15: msgReceiver = fulfillmentServiceSubscriber.CreateReceiver(ReceiveMode.PeekLock); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16: recdMsg = msgReceiver.Receive(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17: msgReceiver.Close(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19: recdOrder = recdMsg.GetBody&amp;lt;Order&amp;gt;(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:  &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21: Console.WriteLine("&lt;span style="color: rgb(139,0,0)"&gt;Received Order {0} on {1}.&lt;/span&gt;", recdOrder.OrderId, “&lt;span style="color: rgb(139,0,0)"&gt;Fulfillment Service Subscriber&lt;/span&gt;"&lt;span style="color: rgb(139,0,0)"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Creati&lt;a href="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_16.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 4px 0px 4px 2px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/image_thumb_7.png" width="415" height="53" /&gt;&lt;/a&gt;ng two additional SubscriptionClients for the Credit Service and Fulfillment Service results in all three subscribers getting the message as shown on the right. Again, in my examples, I am running each subscriber in the same process, but in the real world, these subscribers could be deployed anywhere in the world provided they can establish a connection to TCP 9354.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rules/Actions, Sessions/Groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, what if we wanted to partition the subscribers such that in addition to subscribing to a Topic, additional logic could be evaluated to determine if the subscribers are really interested in the message? Our online retailer probably (err, hopefully) has a centralized inventory management system and credit card processor, but may have different fulfillment centers across the world. &lt;/p&gt;

&lt;p&gt;Based on the customer’s origin, the order should go to the closest fulfillment center to minimize cost and ship times (i.e. North America, South America, Africa, East, Europe, Asia, Australia).&lt;/p&gt;

&lt;p&gt;Azure AppFabric Service Bus V2 supports this approach with Sessions, Rules and Actions. I group these into the idea of a message pipeline. In addition to the subscriptions, the Topic evaluates additional context or content of the published message configured at management time to introduce some additional filtering and very lightweight orchestration. The topic subscription is the right place for this to happen because again, it is a management-time task. Publishers and subscribers merely send/receive messages. It is the benefit of a logically centralized, yet physically distributed messaging model that affords us the ability to manage these details in a centralized way.&lt;/p&gt;

&lt;p&gt;You can create a RuleDescription to evaluate some property or field in the message that indicates country of origin, and as an action, set a property on the message to identify the fulfillment center.&lt;/p&gt;

&lt;p&gt;To illustrate this, first, I’ve added two properties to the BrokerMessage that I am publishing on the “Orders” Topic. I’ll use these properties when I configure my rule and action next:&lt;/p&gt;

&lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: msg.Properties.Add("&lt;span style="color: rgb(139,0,0)"&gt;CountryOfOrigin&lt;/span&gt;", "&lt;span style="color: rgb(139,0,0)"&gt;USA&lt;/span&gt;"); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: msg.Properties.Add("&lt;span style="color: rgb(139,0,0)"&gt;FulfillmentRegion&lt;/span&gt;", "&lt;span style="color: rgb(139,0,0)"&gt;&lt;/span&gt;");&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;&lt;font face="Verdana"&gt;Notice that in line 2 above, I’ve intentionally created the “FulfillmentRegion” property with an empty string, since we are going to apply some logic to determine the fulfillment region. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font face="Verdana"&gt;Now, I use a RuleDescription and SqlFilterExpression to determine if the CountryOfOrigin is the United States. If the SqlFilterExpression evaluates to true, then the SqlFilterAction fires and sets the FulfillmentRegion  to “North America”:&lt;/font&gt;&lt;/p&gt;
&lt;font face="Verdana"&gt;
  &lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: RuleDescription fulfillmentRuleDescription = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; RuleDescription(); &lt;/pre&gt;
&lt;pre style="background-color: rgb(255,255,255); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: fulfillmentRuleDescription.FilterExpression = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; SqlFilterExpression("&lt;span style="color: rgb(139,0,0)"&gt;CountryOfOrigin = 'USA'&lt;/span&gt;"); &lt;/pre&gt;
&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: fulfillmentRuleDescription.FilterAction = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; SqlFilterAction("&lt;span style="color: rgb(139,0,0)"&gt;set fulfillmentRegion='North America'&lt;/span&gt;");&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;Of course, in the real world, there would be a more sophisticated process for identifying the country of origin, but simple, contrived examples make it so that articles get published. &lt;img class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://rickgaribay.net/images/rickgaribay_net/Windows-Live-Writer/AppFabric-Service-Bus-V2-CTP-Topics_12716/wlEmoticon-winkingsmile_2.png" /&gt;&lt;/p&gt;

  &lt;p&gt;The evaluation and any corresponding actions must fire when the message is in-flight as any actions taken could influence the routing of the message, as with the example above which will meet a subscription rule we’ll configure on the Fulfillment Service Description next. &lt;/p&gt;

  &lt;p&gt;OK, so now we have some properties we can play with and we’ve defined a RuleDescription. The last thing we need to do is modify the FulfillmentServiceSubscription to include the RuleDescription I just created. This makes the FulfillmentSubscription conditional, based on the conditions we've defined in the instance of the RuleDescription called fulfillmentRuleDescription:&lt;/p&gt;

  &lt;pre style="border-bottom: rgb(206,206,206) 1px solid; border-left: rgb(206,206,206) 1px solid; padding-bottom: 5px; background-color: rgb(251,251,251); min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: rgb(206,206,206) 1px solid; border-right: rgb(206,206,206) 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: rgb(251,251,251); margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: Subscription fulfillmentServiceSubscription = ordersTopic.AddSubscription("&lt;span style="color: rgb(139,0,0)"&gt;FulfillmentServiceSubscription&lt;/span&gt;", fulfillmentRuleDescription);&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;
    &lt;br /&gt;Now, when I run my code, all three subscribers receive the order message just as before, however this time, we know that the only reason that the Fulfillment Service is getting the message is because it is acting as the North America fulfillment center. If I modify the CountryOfOrigin property in line 1 in the 3rd code sample up from here to anything but “North America” the Fulfillment Service will not receive the message at all.&lt;/p&gt;

  &lt;p&gt;As I continue to model out my subscribers, I could create a subscription for each fulfillment center that is capable of receiving real-time orders and then create RuleDescriptions accordingly. This would allow me to distribute fulfillment geographically (good for scale, reliability and happy customers) as well as ensuring that I am always only pulling back messages that I need. If, during peak times around holidays, the volume of orders increases, I can simply add additional fulfillment subscribers for that region to ensure that packages ship as quickly as possible and that no orders are lost.&lt;/p&gt;
&lt;/font&gt;

&lt;p&gt;&lt;strong&gt;Closing Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So far, I’m pretty impressed with the powerful messaging capabilities that Azure AppFabric Service Bus V2 Topics introduced in the May CTP, and I’m excited to see where things are going.&lt;/p&gt;

&lt;p&gt;As Azure AppFabric Service Bus matures further, I would love to see additional transport channels supported by Azure AppFabric Service Bus Topics. Just as with the creation of the Topic and Subscriptions as a management function, the transport would also be defined and created/configured at management time. This is really where the power and elegance of Topics shines through in my opinion because the publisher and subscriber don’t know or care about the transport- they’re just connecting to a topic and sending and/or receiving messages.&lt;/p&gt;

&lt;p&gt;By way of some nit picks, I think that PublisherClient makes more sense than TopicClient, and along with considering a modification to SubscriptionClient, having a PublisherClient and SubscriberClient that publish and subscribe to a Topic seems a lot cleaner and more intuitive to me.&lt;/p&gt;

&lt;p&gt;I’m also trying to get used the fact that we need Clients &lt;em&gt;and&lt;/em&gt; Senders/Receivers. Again, to me it would seem more intuitive to simply have a PublisherClient and SubscriberClient that own the sending and receiving. Perhaps we’re jus seeing visible seams in the API due to the early nature, or there’s a good reason for this that I haven’t thought of yet.&lt;/p&gt;

&lt;p&gt;At PDC 10, the AppFabric team announced that they are investing in an “Integration Service” that will provide additional messaging capabilities by way of transformation and advanced mapping similar to how we leverage these capabilities in BizTalk today. I can see Topics getting much more robust when, in addition to modifying properties on the BrokerMessage, we can mediate and transform a message in-flight just before reaching a subscriber, and I can also think of some nice message enrichment patterns that would be very nice. &lt;/p&gt;

&lt;p&gt;*** One important thing to note is that in the current May CTP, Queues and Topics do not provide the same NAT/Firewall traversal capabilities of their relay siblings. For the .NET Messaging API (which I’ve been using to share my learnings thus far) as well as the WCF ServiceBusMessagingBinding, outbound TCP 9354 is required. Also note that the channel type is Net.Tcp (think WCF). This means that in the current CTP, the only way to ensure full interoperability across publishers/subscribers and guarantee an outbound connection (assuming HTTP ports aren’t locked down) is to use the REST API, but I suspect we’ll see more parity of this important feature across client types for Queues and Topics. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There’s still much to explore around sessions, filtering, the WCF ServiceBusMessagingBinding, the REST API and how we might bridge Azure AppFabric Service Bus with on-premise messaging capabilities. Exciting stuff- stay tuned!&lt;/p&gt;&lt;img src="http://rickgaribay.net/aggbug/309.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Rick G. Garibay</dc:creator>
            <guid>http://rickgaribay.net/archive/2011/05/31/exploring-appfabric-service-bus-v2-may-ctp-topics.aspx</guid>
            <pubDate>Tue, 31 May 2011 10:23:00 GMT</pubDate>
            <comments>http://rickgaribay.net/archive/2011/05/31/exploring-appfabric-service-bus-v2-may-ctp-topics.aspx#feedback</comments>
            <wfw:commentRss>http://rickgaribay.net/comments/commentRss/309.aspx</wfw:commentRss>
            <trackback:ping>http://rickgaribay.net/services/trackbacks/309.aspx</trackback:ping>
        </item>
    </channel>
</rss>
