<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Justin Smith's Blog : Syndication</title><link>http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx</link><description>Tags: Syndication</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>MySpace does WCF</title><link>http://blogs.msdn.com/justinjsmith/archive/2008/01/31/myspace-does-wcf.aspx</link><pubDate>Fri, 01 Feb 2008 07:12:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7366363</guid><dc:creator>justinjsmith</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/7366363.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=7366363</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=7366363</wfw:comment><description>&lt;p&gt;My friend Vittorio has posted that MySpace will be talking about WCF at Mix 2008 (&lt;a href="http://blogs.msdn.com/vbertocci/archive/2008/01/31/wcf-and-myspace-a-restful-mix-session.aspx"&gt;see it here&lt;/a&gt;). This promises to be a good session!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7366363" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/.NET+Framework+3.5/default.aspx">.NET Framework 3.5</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Web+Programming+with+WCF/default.aspx">Web Programming with WCF</category></item><item><title>Life of a WCF Demo, Part 1</title><link>http://blogs.msdn.com/justinjsmith/archive/2008/01/22/life-of-a-wcf-demo-part-1.aspx</link><pubDate>Wed, 23 Jan 2008 02:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7202858</guid><dc:creator>justinjsmith</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/7202858.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=7202858</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=7202858</wfw:comment><description>&lt;P&gt;I thought it might be mildly interesting to document the lifecycle of a demo. Over the next week or so I have to design, build, and deploy a demo that shows off some of the web-centric features of WCF in the .NET Framework 3.5. First, let me state the constraints:&lt;/P&gt;
&lt;P&gt;1) it has to be lightweight - a person in the field or in the community must be able to run it with a bare bones setup (VS only)&lt;/P&gt;
&lt;P&gt;2) it has to be "codable" from the ground up in a short period of time w/o much practice&lt;/P&gt;
&lt;P&gt;3) it has to show off the new HTTP programming model, Syndication, and JSON messaging.&lt;/P&gt;
&lt;P&gt;4) it should also bring to the surface other WCF features like new tooling, flexible configuration options, etc.&lt;/P&gt;
&lt;P&gt;5) ideally, a silverlight client consumes the services.&lt;/P&gt;
&lt;P&gt;I'm not sure how many parts it will take to blog this. Time will tell.&lt;/P&gt;
&lt;P&gt;Since the demo is supposed to be lightweight and it has to be codable, it is going to lack the "real life" aspect. Simplicity and demos and reflecting real world scenarios are often in conflict in demos. Since this is not going to be a keynote, there is no need to dwell on it too long.&lt;/P&gt;
&lt;P&gt;With that in mind, I will build an album metadata sharing service. The service just returns information about albums in a store and provides consumers with some ability to create side effects (add, change, or delete an album). Because the demo is supposed to be codable, we will keep the album type definition simple, maybe just a few fields. &lt;/P&gt;
&lt;P&gt;There will likely need to be a backing store for the album data, so we have to decide where to store album data. Since DB connections can be annoying to deploy to lots of people, I will opt for an XML File in a VS project.&lt;/P&gt;
&lt;P&gt;In regards to project structure, the VS solution will have 2 projects: AlbumService (WCF Service) and AlbumClient (Silverlight app). If we are feeling spunky, we can also build an ASP.NET AJAX app that uses the service.&lt;/P&gt;
&lt;P&gt;Now it's time to code. I've found it's important to document any hiccups that occur along the way, and be certain those get communicated to the people that may present the demo in the future. I use a simple MS Word document. In this case, I am using LiveWriter, and posting it to my blog :).&lt;/P&gt;
&lt;H3&gt;Step 1: Create a VS Solution&lt;/H3&gt;
&lt;P&gt;Easy enough. &lt;/P&gt;
&lt;H3&gt;Step 2: Create a WCF Class Library Project&lt;/H3&gt;
&lt;P&gt;VS 2008 includes some new WCF tooling. You basically go to File-&amp;gt;New-&amp;gt;Project-&amp;gt;WCF-&amp;gt;WCF Service Library.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=175 alt=img1 src="http://blogs.msdn.com/blogfiles/justinjsmith/WindowsLiveWriter/LifeofaWCFDemoPart1_CDB6/img1_3.png" width=640 border=0 mce_src="http://blogs.msdn.com/blogfiles/justinjsmith/WindowsLiveWriter/LifeofaWCFDemoPart1_CDB6/img1_3.png"&gt; &lt;/P&gt;
&lt;P&gt;In keeping with the VS Tradition, several files are created for you that have mildly annoying names like IService1, Service1, and some random namespace. Even though the names are a bit annoying, the project will compile and run as is.&lt;/P&gt;
&lt;P&gt;So, if one is giving this demo live, you could literally press F5, see the autohost and new WCF client start, and talk to those for as long as you felt compelled. I think the following points are important:&lt;/P&gt;
&lt;P&gt;1) the autohost is a dev-only thing. It is all about getting a feedback loop going. It's kindred spirits with Cassini.&lt;/P&gt;
&lt;P&gt;2) the autohost also lets you defer the choice of hosting. It may be the case that you aren't sure which host you will use. This autohost model helps you avoid (but doesn't prevent) you from creating frivolous dependencies on a type of host.&lt;/P&gt;
&lt;P&gt;3) the test client makes it easy to pass basic data back to the service and check the results. Again, this is about a feedback loop.&lt;/P&gt;
&lt;P&gt;4) The App.config created by the project creates 2 endpoints: a wsHttpBinding endpoint and a metadata exchange endpoint. It may be worth talking about how simple it is to setup endpoints that adhere to these complex protocols. It depends on the audience. Some of the more militant RESTafarian sects may well try to light your hair on fire if you bring up WS-*.&lt;/P&gt;
&lt;P&gt;5) You can change the config options using a new tool (WCFConfigEditor.exe). You get to that tool by right clicking the App.config file. This only works for the WCF Service library project. If you are trying to edit a config file in a project that was not created from that template, then you can go to the Tools menu, then select WCF Service Configuration Editor. After you do that, subsequet request for the context menu will work.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/justinjsmith/WindowsLiveWriter/LifeofaWCFDemoPart1_CDB6/img1_5.png" mce_href="http://blogs.msdn.com/blogfiles/justinjsmith/WindowsLiveWriter/LifeofaWCFDemoPart1_CDB6/img1_5.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=223 alt=img1 src="http://blogs.msdn.com/blogfiles/justinjsmith/WindowsLiveWriter/LifeofaWCFDemoPart1_CDB6/img1_thumb_1.png" width=244 border=0 mce_src="http://blogs.msdn.com/blogfiles/justinjsmith/WindowsLiveWriter/LifeofaWCFDemoPart1_CDB6/img1_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;In part 2, I will run through the code and config changes.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7202858" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/.NET+Framework+3.5/default.aspx">.NET Framework 3.5</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Web+Programming+with+WCF/default.aspx">Web Programming with WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/JSON/default.aspx">JSON</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/_2600_quot_3B00_ASP.NET+AJAX+Integration_2600_quot_3B00_/default.aspx">&amp;quot;ASP.NET AJAX Integration&amp;quot;</category></item><item><title>PictureServices and BizTalk Services</title><link>http://blogs.msdn.com/justinjsmith/archive/2008/01/18/pictureservices-and-biztalk-services.aspx</link><pubDate>Sat, 19 Jan 2008 03:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7154978</guid><dc:creator>justinjsmith</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/7154978.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=7154978</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=7154978</wfw:comment><description>&lt;P&gt;Previous posts have talked a bit about PictureServices. Now I'd like to run through what it took to bring PictureServices to the BizTalk Services. I've talked a bit in other posts about BizTalk Services, but it has some interesting and very useful messaging features. For starters, BizTalk Services has an endpoint that can do HTTP transforms on messages. It goes like this:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;MyApp connects to BizTalk Services&lt;/LI&gt;
&lt;LI&gt;BizTalk Services and MyApp use WS-* security, coupled with the WCF binary message encoding.&lt;/LI&gt;
&lt;LI&gt;Other clients (Java, PHP, Ruby, whatever) can hit an HTTP endpoint hosted in the BizTalk Services "mesh". We will call this endpoint the HTTP Endpoint.&lt;/LI&gt;
&lt;LI&gt;Upon receipt of a message, the HTTP Endpoint tries to dispatch that message (or request) to MyApp.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;If we use this set of steps with PictureServices, then you have a way to serve local pictures over the internet. If you just look at this task, there are lots of other ways to do this. I'm not suggesting that BizTalk Services is the next cool way to share photos. Instead, I think there are lots of cool apps that can take advantage of this kind of feature set.&lt;/P&gt;
&lt;P&gt;Down to nuts and bolts - the service contract. PictureServices defines a service contract with operations for RSS, ATOM, and Simple list extensions. For the sake of time, I opted to have a single feature: get an RSS feed. Here's what the service contract looks like:&lt;/P&gt;&lt;PRE class=csharpcode&gt;[ServiceContract]
&lt;SPAN class=kwrd&gt;interface&lt;/SPAN&gt; IBTSPictureSyndication
{
  [OperationContract(Action=&lt;SPAN class=str&gt;"GET"&lt;/SPAN&gt;, ReplyAction=&lt;SPAN class=str&gt;"GETRESPONSE"&lt;/SPAN&gt;)]
  Message GetFeed();
}&lt;/PRE&gt;
&lt;P&gt;
&lt;STYLE type=text/css&gt;.csharpcode {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	MARGIN: 0em
}
.csharpcode .rem {
	COLOR: #008000
}
.csharpcode .kwrd {
	COLOR: #0000ff
}
.csharpcode .str {
	COLOR: #006080
}
.csharpcode .op {
	COLOR: #0000c0
}
.csharpcode .preproc {
	COLOR: #cc6633
}
.csharpcode .asp {
	BACKGROUND-COLOR: #ffff00
}
.csharpcode .html {
	COLOR: #800000
}
.csharpcode .attr {
	COLOR: #ff0000
}
.csharpcode .alt {
	MARGIN: 0em; WIDTH: 100%; BACKGROUND-COLOR: #f4f4f4
}
.csharpcode .lnum {
	COLOR: #606060
}
&lt;/STYLE&gt;
&lt;/P&gt;
&lt;P&gt;The return type is System.ServiceModel.Channels.Message because the BizTalk Services SDK does not have full parity with the .NET Framework 3.5's capabilities. This will happen over time. To be honest, most of the head scratching I went through was due to the disparity between these two APIs.&lt;/P&gt;
&lt;P&gt;Another interesting bit is the implementation of the GetFeed method. The syndication, the images, and all the thumbnail HTTP GETs (remember they are transformed) are going to flow through this one method. As a result, we have to test the requested address to determine which resource is being requested. &lt;/P&gt;
&lt;P&gt;For that we turn to our new best friend: the UriTemplate. This is a new type introduced in .NET 3.5 - it makes URI parsing much easier (among other things).&lt;/P&gt;
&lt;P&gt;There are 3 conditions I test for: &lt;/P&gt;
&lt;P&gt;1) a request for the whole feed&lt;/P&gt;
&lt;P&gt;2) a request for an image&lt;/P&gt;
&lt;P&gt;3) a request for a thumbnail.&lt;/P&gt;
&lt;P&gt;Here's the implementation:&lt;/P&gt;&lt;PRE class=csharpcode&gt;[ServiceBehavior(AddressFilterMode=AddressFilterMode.Prefix)]
&lt;SPAN class=kwrd&gt;sealed&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; BTSPictureSyndication : IBTSPictureSyndication
{
    String feedUri = &lt;SPAN class=str&gt;"/Feed/"&lt;/SPAN&gt;;
    String pictureUri = &lt;SPAN class=str&gt;"/Feed/Picture/{pictureId}"&lt;/SPAN&gt;;
    String thumbnailUri = &lt;SPAN class=str&gt;"/Feed/Picture/t/{pictureId}"&lt;/SPAN&gt;;

    PictureService service = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; PictureService();

    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; Message GetFeed()
    {
        &lt;SPAN class=rem&gt;// get the To address and the base address&lt;/SPAN&gt;
        Uri to = OperationContext.Current.RequestContext.RequestMessage.Headers.To;
        Uri baseAddress = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Uri(ConfigurationManager.AppSettings[&lt;SPAN class=str&gt;"baseAddress"&lt;/SPAN&gt;]);

        &lt;SPAN class=rem&gt;// check to see if it's a request for the main feed&lt;/SPAN&gt;
        UriTemplate feedTemplate = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; UriTemplate(feedUri);
        UriTemplateMatch feedMatch = feedTemplate.Match(baseAddress, to);

        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (feedMatch != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; GetMainFeed();
        }

        &lt;SPAN class=rem&gt;// check to see if it's a request for a picture&lt;/SPAN&gt;
        UriTemplate pictureTemplate = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; UriTemplate(pictureUri);
        UriTemplateMatch pictureMatch = pictureTemplate.Match(baseAddress, to);

        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (pictureMatch != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            String pictureId = pictureMatch.BoundVariables[&lt;SPAN class=str&gt;"pictureId"&lt;/SPAN&gt;];
            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; GetPicture(pictureId);
        }

        &lt;SPAN class=rem&gt;// check to see if it's a request for a thumbnail&lt;/SPAN&gt;
        UriTemplate thumbnailTemplate = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; UriTemplate(thumbnailUri);
        UriTemplateMatch thumbnailMatch = thumbnailTemplate.Match(baseAddress, to);

        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (thumbnailMatch != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            String pictureId = thumbnailMatch.BoundVariables[&lt;SPAN class=str&gt;"pictureId"&lt;/SPAN&gt;];
            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; GetPictureThumbnail(pictureId);
        }

        &lt;SPAN class=rem&gt;// we don't know what it is, so throw&lt;/SPAN&gt;
        &lt;SPAN class=kwrd&gt;throw&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; InvalidOperationException(String.Format(&lt;SPAN class=str&gt;"the address {0} was not matched"&lt;/SPAN&gt;, to.ToString()));

    }

    &lt;SPAN class=rem&gt;// use the service object to get the picture&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Message GetPicture(String pictureId)
    {
        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; StreamMessageHelper.CreateMessage(OperationContext.Current.IncomingMessageVersion, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;        &lt;SPAN class=str&gt;"GETRESPONSE"&lt;/SPAN&gt;, service.GetPicture(pictureId));
    }

    &lt;SPAN class=rem&gt;// use the service object to get a thumbnail&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Message GetPictureThumbnail(String pictureId)
    {
        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; StreamMessageHelper.CreateMessage(OperationContext.Current.IncomingMessageVersion, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;        &lt;SPAN class=str&gt;"GETRESPONSE"&lt;/SPAN&gt;, service.GetPictureThumbnail(pictureId));
    }

    &lt;SPAN class=rem&gt;// get the main feed (RSS)&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Message GetMainFeed()
    {
        Rss20FeedFormatter formatter = service.GetPicturesAsRss();

        MemoryStream stream = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; MemoryStream();
        XmlWriter writer = XmlWriter.Create(stream);

        formatter.WriteTo(writer);

        writer.Close();
        stream.Position = 0;

        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; StreamMessageHelper.CreateMessage(OperationContext.Current.IncomingMessageVersion, &lt;SPAN class=str&gt;"GETRESPONSE"&lt;/SPAN&gt;, stream);
    }
}&lt;/PRE&gt;
&lt;P&gt;Another thing that's worth pointing out is the presence of the AddressFilterMode property on the ServiceBehavior attribute annotation. This setting tells the WCF dispatching infrastructure to allow prefix matches to filter through to the method. In practical terms, this means that a request to &lt;A href="http://foo/bar/baz" mce_href="http://foo/bar/baz"&gt;http://foo/bar/baz&lt;/A&gt; would get dispatched to the same method as &lt;A href="http://foo/bar" mce_href="http://foo/bar"&gt;http://foo/bar&lt;/A&gt;. That's how we are returning the full feed, the image, or a thumbnail.&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://netfx3.com/files/folders/wcf_samples/entry15417.aspx" target=_blank mce_href="http://netfx3.com/files/folders/wcf_samples/entry15417.aspx"&gt;Here's a zipped version of the project &lt;/A&gt;(note that you must also have PictureServices).&lt;/P&gt;
&lt;STYLE type=text/css&gt;.csharpcode {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	MARGIN: 0em
}
.csharpcode .rem {
	COLOR: #008000
}
.csharpcode .kwrd {
	COLOR: #0000ff
}
.csharpcode .str {
	COLOR: #006080
}
.csharpcode .op {
	COLOR: #0000c0
}
.csharpcode .preproc {
	COLOR: #cc6633
}
.csharpcode .asp {
	BACKGROUND-COLOR: #ffff00
}
.csharpcode .html {
	COLOR: #800000
}
.csharpcode .attr {
	COLOR: #ff0000
}
.csharpcode .alt {
	MARGIN: 0em; WIDTH: 100%; BACKGROUND-COLOR: #f4f4f4
}
.csharpcode .lnum {
	COLOR: #606060
}
&lt;/STYLE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7154978" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Services+in+the+Cloud/default.aspx">Services in the Cloud</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/BizTalk+Services/default.aspx">BizTalk Services</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Web+Programming+with+WCF/default.aspx">Web Programming with WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/BizTalk.NET+Services/default.aspx">BizTalk.NET Services</category></item><item><title>XML namespace declarations in SyndicationFeed objects</title><link>http://blogs.msdn.com/justinjsmith/archive/2008/01/16/xml-namespace-declarations-in-syndicationfeed-objects.aspx</link><pubDate>Wed, 16 Jan 2008 12:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7128380</guid><dc:creator>justinjsmith</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/7128380.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=7128380</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=7128380</wfw:comment><description>&lt;P&gt;Following on the heels of &lt;A href="http://hyperthink.net/blog/2008/01/15/Declaring+XML+Namespaces+On+A+SyndicationFeed.aspx" mce_href="http://hyperthink.net/blog/2008/01/15/Declaring+XML+Namespaces+On+A+SyndicationFeed.aspx"&gt;Steve Maine's post&lt;/A&gt; about namespaces in Syndication objects (Feeds, items, etc.), I thought it wise to plug the new stuff in &lt;A href="http://samples.netfx3.com/pictureservices" mce_href="http://samples.netfx3.com/pictureservices"&gt;PictureServices&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;At the moment, &lt;A href="http://samples.netfx3.com/pictureservices" mce_href="http://samples.netfx3.com/pictureservices"&gt;PictureServices&lt;/A&gt; implements SLE (Simple List Extensions), and does a pretty crude job of it at that. Time permitting, I will add more support for field and group customization. For now, it serves as an example more than a carrier grade implementation. In any event, I used extension methods in the following type definition to make it easy to insert the right namespace declarations in the feed:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Collections.Generic;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Linq;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Text;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.ServiceModel.Syndication;
&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.Xml;

&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; Microsoft.DPE.Samples.SyndicationExtensions
{
    &lt;SPAN class=rem&gt;// adds custom namespaces to an item or a feed&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; SyndicationNamespaceHelper
    {
        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DeclareNamespace(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt; SyndicationFeed feed, &lt;BR&gt;                                                 String prefix,&lt;BR&gt;                                                 String ns)
        {
            XmlQualifiedName key = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; XmlQualifiedName(prefix, NamespaceUris.XMLNamespace);
            feed.AttributeExtensions.Add(key, ns);
        }

        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DeclareNamespace(&lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt; SyndicationItem item, &lt;BR&gt;                                                 String prefix,&lt;BR&gt;                                                 String ns)
        {
            XmlQualifiedName key = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; XmlQualifiedName(prefix, NamespaceUris.XMLNamespace);
            item.AttributeExtensions.Add(key, ns);
        }
    }
}&lt;/PRE&gt;
&lt;STYLE type=text/css&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;The usage model is simple - just new up a feed or an item, then call DeclareNamespace. Piece of cake.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7128380" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/.NET+Framework+3.5/default.aspx">.NET Framework 3.5</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Web+Programming+with+WCF/default.aspx">Web Programming with WCF</category></item><item><title>PictureServices updated to VS 2008 RTM</title><link>http://blogs.msdn.com/justinjsmith/archive/2008/01/14/pictureservices-updated-to-vs-2008-rtm.aspx</link><pubDate>Tue, 15 Jan 2008 06:18:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7114971</guid><dc:creator>justinjsmith</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/7114971.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=7114971</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=7114971</wfw:comment><description>&lt;p&gt;Today I updated PictureServices to work with the RTM release of Visual Studio 2008 and the .NET Framework 3.5 (what a mouthful). My testing rigor for this release was less than perfect. Please let me know if you find any bugs.&lt;/p&gt;  &lt;p&gt;For what it's worth, the changes in the API made the simple list extensions implementation simpler. Honestly, I was skeptical at first, but it really is pretty straightforward. &lt;/p&gt;  &lt;p&gt;Check out the new version &lt;a href="http://samples.netfx3.com/pictureservices"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7114971" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/.NET+Framework+3.5/default.aspx">.NET Framework 3.5</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Web+Programming+with+WCF/default.aspx">Web Programming with WCF</category></item><item><title>WCF Syndication article in MSDN Magazine...</title><link>http://blogs.msdn.com/justinjsmith/archive/2007/12/23/wcf-syndication-article-in-msdn-magazine.aspx</link><pubDate>Sun, 23 Dec 2007 17:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6845637</guid><dc:creator>justinjsmith</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/6845637.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=6845637</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=6845637</wfw:comment><description>&lt;P&gt;It seems that the RSS/Atom article I wrote for MSDN magazine was just published: &lt;A href="http://msdn.microsoft.com/msdnmag/issues/08/01/WCFinOrcas/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/08/01/WCFinOrcas/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/08/01/WCFinOrcas/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The RTM version of .NET 3.5 was not available when I wrote the article, so I avoided the extensibility capabilites of the API. Perhaps that's fodder for another article.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6845637" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/.NET+Framework+3.5/default.aspx">.NET Framework 3.5</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Web+Programming+with+WCF/default.aspx">Web Programming with WCF</category></item><item><title>Hamsters, Robots, and Services</title><link>http://blogs.msdn.com/justinjsmith/archive/2007/12/14/hamsters-robots-and-services.aspx</link><pubDate>Fri, 14 Dec 2007 22:49:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6772045</guid><dc:creator>justinjsmith</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/6772045.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=6772045</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=6772045</wfw:comment><description>&lt;p&gt;This is one of the more interesting videos I've seen in a while:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.irobot.com/create/videos/bionic%20hamster.html" href="http://www.irobot.com/create/videos/bionic%20hamster.html"&gt;http://www.irobot.com/create/videos/bionic%20hamster.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I've been poking around a bit in the Microsoft Robotics Studio on and off for the past few months, and I'm intrigued by their approach to services, tasks, and coordination. From what I can tell, it seems just plain brilliant.&lt;/p&gt;  &lt;p&gt;Since things around here are slowing down quite a bit for the holidays, I think I am going to dig into the Robotics Studio and runtime (on vacation time). Hopefully I will have something useful to show in January.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6772045" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Robotics/default.aspx">Robotics</category></item><item><title>Check out Picture Services</title><link>http://blogs.msdn.com/justinjsmith/archive/2007/08/20/check-out-picture-services.aspx</link><pubDate>Tue, 21 Aug 2007 01:23:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4485395</guid><dc:creator>justinjsmith</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/4485395.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=4485395</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=4485395</wfw:comment><description>&lt;p&gt;A few days ago we released a new sample called Picture Services. As the name implies, this sample centers on pictures. More specifically, it demonstrates how to use the WCF API in the .NET Framework 3.5 to syndicate images from your local machine and expose them via a REST endpoint. &lt;/p&gt; &lt;p&gt;There's been a fair amount of buzz&amp;nbsp;recently&amp;nbsp;around REST development. With the .NET Framework 3.5, REST constructs are now 1st class citizens in the WCF programming model.&lt;/p&gt; &lt;p&gt;We've tried to make the sample easy to understand, but still have enough complexity to warrant investigation. Features highlighted include: simple syndication, Simple List Extensions, HTTP GET programming, as well as some of the new tooling and hosting options. Check it out and let me know what you think.&lt;/p&gt; &lt;p&gt;To download the sample, just go &lt;a href="http://samples.netfx3.com/pictureservices/"&gt;here&lt;/a&gt;, select "Source Code", and then "Download". Alternately, you can simply go &lt;a href="http://www.netfx3.com/files/folders/sampleservices/entry11931.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4485395" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/.NET+Framework+3.5/default.aspx">.NET Framework 3.5</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Web+Programming+with+WCF/default.aspx">Web Programming with WCF</category></item><item><title>Syndication formats, endpoints and config files</title><link>http://blogs.msdn.com/justinjsmith/archive/2007/07/18/syndication-formats-endpoints-and-config-files.aspx</link><pubDate>Wed, 18 Jul 2007 20:54:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3940532</guid><dc:creator>justinjsmith</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/3940532.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=3940532</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=3940532</wfw:comment><description>&lt;p&gt;I got a question via email today that forced me to look back through some older emails for the answer. It may make sense to share the question / answer in a broader sense. &lt;/p&gt; &lt;p&gt;Earlier builds of Orcas surfaced a syndication format to an endpoint by way of a behavior. In essence, you could add a SyndicationBehavior to an endpoint, and that behavior dictated the syndication format for that endpoint (RSS or ATOM). With this model you can specify the syndication format in a config file.&lt;/p&gt; &lt;p&gt;The endpoint centric model for syndication formats is no longer in place. The current model centers on the return type for the operation that returns the syndication. If you want to return a syndication from an operation, you should return a SyndicationFeedFormatter&amp;lt;T&amp;gt; or one of it's derived types (RSS and ATOM types available). In the current incarnation, this removes the config options for syndication formats, but the benefit is worth it (in my opinion).&lt;/p&gt; &lt;p&gt;The motivation for this change (according to Steve Maine) has to do with the embrace of the URI in web-centric programming. Strapping an endpoint to a particular format has undesirable impacts on the URI structures of the service(s). Many customers wanted to serve RSS or ATOM from one URI, and vary the format based on the presence of a query string or an accept header. As a result, the SyndicationBehavior vanished.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3940532" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Orcas+Beta+1/default.aspx">Orcas Beta 1</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category></item><item><title>Podcast with Jon Udell</title><link>http://blogs.msdn.com/justinjsmith/archive/2007/05/30/podcast-with-jon-udell.aspx</link><pubDate>Wed, 30 May 2007 21:33:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2991873</guid><dc:creator>justinjsmith</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/2991873.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=2991873</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=2991873</wfw:comment><description>&lt;p&gt;Jon just published a podcast where we discuss how WCF in Orcas simplifies Syndication and RESTful style architectures. Hear it &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=311356"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2991873" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/.NET+Framework+3.5/default.aspx">.NET Framework 3.5</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Orcas+Beta+1/default.aspx">Orcas Beta 1</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/REST/default.aspx">REST</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Web+Programming+with+WCF/default.aspx">Web Programming with WCF</category></item><item><title>BizTalk Services CTP is Public</title><link>http://blogs.msdn.com/justinjsmith/archive/2007/04/25/biztalk-services-ctp-is-public.aspx</link><pubDate>Wed, 25 Apr 2007 18:06:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2272997</guid><dc:creator>justinjsmith</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/2272997.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=2272997</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=2272997</wfw:comment><description>&lt;p&gt;The &lt;a href="http://labs.biztalk.net/"&gt;BizTalk Services CTP&lt;/a&gt; is available for all to play with. In general, the concept is services in the cloud. It's a gross understatement, but enough for now.&amp;nbsp;It's way cool&amp;nbsp;because it&amp;nbsp;opens&amp;nbsp;the door for some innovative service scenarios. I plan on blogging quite a bit about these services in the near future. More soon.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2272997" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Services+in+the+Cloud/default.aspx">Services in the Cloud</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/BizTalk+Services/default.aspx">BizTalk Services</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Eventing/default.aspx">Eventing</category></item><item><title>Syndication - Beyond the News</title><link>http://blogs.msdn.com/justinjsmith/archive/2007/04/18/syndication-beyond-the-news.aspx</link><pubDate>Wed, 18 Apr 2007 22:59:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2179544</guid><dc:creator>justinjsmith</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/justinjsmith/comments/2179544.aspx</comments><wfw:commentRss>http://blogs.msdn.com/justinjsmith/commentrss.aspx?PostID=2179544</wfw:commentRss><wfw:comment>http://blogs.msdn.com/justinjsmith/rsscomments.aspx?PostID=2179544</wfw:comment><description>&lt;p&gt;The next version of the .NET Framework (&lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx"&gt;Orcas&lt;/a&gt;) includes support for web programming via WCF. In this context, web programming is the inclusion of web-centric protocols and constructs into the WCF programming model. Specifically, the WCF-related parts of Orcas support HTTP GET-style programming, HTTP OTHER-style programming, URI-centric resource mapping, rich content-type support, JSON message encodings, and the ability to create and consume syndications. This post relates to syndication. I'll talk about the other WCF features in subsequent posts.&lt;/p&gt; &lt;p&gt;When most of us think about syndication, we think about RSS and/or ATOM news/blog feeds. From experience, most of us don't consider any other uses for syndication. &lt;/p&gt; &lt;p&gt;Consider, for a moment, what syndication actually is. It is simply a set of data that is represented in some format. The format can be RSS, ATOM, &lt;a href="http://msdn2.microsoft.com/en-us/xml/bb190613.aspx"&gt;SSE&lt;/a&gt;, &amp;lt;insert new format here&amp;gt;.&amp;nbsp;&lt;/p&gt; &lt;p&gt;If syndication is the representation of some data, what kinds of data can we syndicate? As it turns out, there is quite a bit: the canonical purchase order example, package deliveries (consider UPS tracking-like capability), moves in an instance of a game, contact lists, &amp;lt;I could go on but won't&amp;gt;. The point here is that syndications are applicable far beyond our instinctual association with news.&lt;/p&gt; &lt;p&gt;We use aggregators (Outlook, IE7, others) to&amp;nbsp;render syndications&amp;nbsp;in a palatable format. If syndications are useful outside of getting the news, do we ever need more than a simple aggregator to consume syndications? The answer is "more than likely". Undoubtedly, many will continue to use standard aggregators to consume feeds (news and other interesting data). These aggregators are not enough for all applications. To be truly useful, we have to be able to consume a syndication and take action based on the contents of that syndication.&lt;/p&gt; &lt;p&gt;If you find yourself wondering "Self, why is there syndication support in Orcas? Is Microsoft trying to make it easier to create and consume news/blog feeds?"&lt;/p&gt; &lt;p&gt;The answer is that we (here at Microsoft) think syndication is a useful way to represent some sets of data. Furthermore, we (here at Microsoft) want to provide a set of tools that provide&amp;nbsp;feature rich, easy, and flexible&amp;nbsp;syndication capabilities.&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2179544" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/justinjsmith/archive/tags/Syndication/default.aspx">Syndication</category></item></channel></rss>