Microsoft Feed API documentation

As I discussed earlier, the Windows RSS platform (common feed list, synchronization engine and feed store) exposes all of its functionality to any application. These APIs are known as the Microsoft Feed APIs, and the documentation is now live on MSDN! Check it out and give us feedback.

Next week, we’ll post info on a neat little sample app that works against the Beta 2 Preview. Look for it!

– Walter

[11/28/06 Updated MSDN documentation link]

Comments (19)

  1. CLaueR says:

    Any managed wrappers in the work?

  2. George J. Capnias says:


  3. mabster says:

    I’ve had a bit of a play with the API in C# (just add a reference to msfeeds.dll in your project, CLaueR).

    It cries out for some more async methods. I don’t know how easy this is to implement in your COM interfaces, but IFeed needs a “DownloadAsync” method. It could either accept a callback as a parameter to that method, or also provide a “DownloadCompleted” event.

    Also a “Download” method on IFeedFolder would be great – to get all feeds within that folder.

  4. BrandonFurtwangler says:

    It seems strange that MS is making non-.NET API’s still.  Who uses C++ still?

    Of course I’m kidding, but seriously will there be a managed API for RSS?

  5. mentas says:

    Of course a managed API for RSS is coming.. Maybe with WinFX.

  6. BestSnowman says:

    I have been waiting for this since the platfrom was announced. Now if only i could skip out of classes and work to work with it.

  7. mabster says:

    Do the "FeedFolderWatcher" and "FeedWatcher" interfaces work in the managed API? I’ve been trying something like this in C#:

    FeedWatcher fw = (FeedWatcher)feed.GetWatcher(…);

    But it throws an "InvalidCastException".

    How do I use the watcher interfaces in C#? Or can’t I?



  8. PatriotB says:

    I’m confused over the need for having two separate sets of interfaces (IFeed, which is based on IDispatch, vs. IXFeed which I assume is derived directly from IUnknown (though the reference doesn’t say)).  There should be no reason for the X interfaces — C++ code can early-bind to interfaces derived from IDispatch just as well as those from IUnknown.

    I haven’t seen any other APIs from Microsoft that use this pattern.  For example, in MSHTML, most of the interfaces are derived from IDispatch, thus compatible with scripts, and are also early-bind-able from C++.  Same thing with the MSXML APIs.  In fact, one of Automation’s largest strengths is that as long as your interface is derived from IDispatch, you can use the same interface for both early and late binding.  I don’t see why the feeds API should need two sets of interfaces.

    P.S. I love that there’s an example in the documentation that references a certain "Raymond’s Win32 blog" 🙂

  9. Andrew Davey says:

    It’s 2006 and we’re still using COM for new APIs?!! Ergh…

  10. PatriotB says:

    Yes Andrew, they are using COM.  For one thing, IE does not have the .NET Framework as a system requirement.

    IMHO, it’s better for managed apps to have to use a COM API than for unmanaged apps to have to use a .NET API.  Otherwise it would be a huge performance hit for unmanaged apps, to have to pull in the framework just to use this simple RSS API.

    Though WinFX is an important part of Vista, there is still a significant amount of new features that are implemented as Win32- or COM-style APIs.  I read that there are over 4000 such new APIs in Vista.  I would expect that in the next Windows release after Vista we’ll see the vast majority of new APIs being managed.

  11. mabster says:

    I’m playing around with the Feed API, and I keep striking an error when accessing IFeedItem.PubDate.

    For some feeds, even trying to read a value from this property is raising an ArgumentException, which tells me that the date is not a valid OleAut date.

    Right now I’ve wrapped any access to this property in a try/catch block, but this seems less than ideal. What’s the go with this?

    ps. This is in Visual C# 2005 Express.

  12. RCerff says:

    problems enumerating the feed items of an feed.

    I use the Feed API via InterOp in an .NET project.

    I have no problem to enumerate each feed in a feeds collection.

    But when I try to enumerate the Items of a feed, there is no enumeration support?

    when I use the following code:

    foreach (IFeed feed in feeds) // OK, feeds is of type IFeedsEnum and enumerable


      foreach (IFeedItem item in feed.Items) // doesn’t compile, because feed.Items is from base type object and not enumerable.




  13. Andrew Davey says:

    How do feed/folder events work from VB.NET?

    I have this at the moment:

    Dim mgr As New FeedsManager

    Dim folder As IFeedFolder = mgr.RootFolder

    Dim events As FeedFolderWatcher = folder.GetWatcher(FEEDS_EVENTS_SCOPE.FES_ALL, FEEDS_EVENTS_MASK.FEM_FOLDEREVENTS)

    AddHandler events.FeedAdded, AddressOf FeedAdded

    However it seems GetWatcher is not returning a FeedFolderWatcher object, but an IFeedFolderEvents object instead. But IFeedFolderEvents does not have any events on it. Maybe I’m missing something simple here?

    The sooner you guys get a proper managed wrapper sorted the better!!! You want developers to play with the feed API and use it in new apps? Well guess what? People like using MANAGED CODE for new apps. (I’m only using option-strict-off-VB so I don’t have to put explicit casts everywhere I want to get feeds, etc.)

    BTW: I’d be happy to start a GotDotNet project for a managed wrapper if MS aren’t planning one.

  14. Andrew Davey says:

    RCerff: You can cast feed.Items to IEnumerable to enable foreach enumeration. Yes that sucks, but it works…

  15. Andrew Davey says:

    The new Windows Mail client is using a simple directory structure to store email, instead of opaque binary files.

    Do you wonder if developers will be more open to using the common feeds platform if they can actually open the XML straight from the file system?

    (For those who care the binary files are located at "c:documents and settings<user>Local SettingsApplication DataMicrosoftFeeds")

    Of course I’d much rather use a nice API when writing an application, but in some cases simplicity is best…

    In addition, are you working on a MSN Desktop Search IFilter so that people can search their feeds along with the rest of their files?

  16. Wim De Cleen says:

    Been waiting for this one, since I got it I can’t stop playing with it. Nice job, I posted a really simple sample on my blog, it is work in progress but it all about sharing feed lists. One drawback is that there is no managed wrapper but I suppose this is just a matter of time.

  17. modicr says:


    The official Microsoft line is that all this COM activity is because of legacy code. It would be madness to redo Office or IE from scratch as a .NET application. That’s true up to a point, but it is not the whole story. COM solves problems that .NET 1.x does not address, in particular GUI object embedding and application automation. COM evolved out of DDE (Dynamic Data Exchange) and OLE (Object Linking and Embedding). It is highly suited for extensible GUI applications like Visual Studio and Office, because that is what it was designed for.

    These issues are beginning to be addressed in .NET 2.0. The forthcoming Indigo provides a message-based alternative to COM automation (ServiceContract and DataContract), while Avalon has a managed-code API for compound documents. However, there is another problem here, which is GUI performance. To date, this has been disappointing in .NET. Even in .NET 2.0, GUI applications seem laggy compared to native code apps. My understanding is that Avalon together with more internal use of managed DirectX may solve this, but it remains a big issue for developers doing GUI-intensive applications.


  18. Vijaya Krishna says:

    What is the solution given in .NET 2.0 for OLE?

    Actually, I need to provide a text editor for a web application and store it as MS Word document.

    So, I am searching for a OLE kind of tool which help in embedding the MS Word object in the browser.

    Thanks in advance.

  19. Ron Wild says:

    I haven’t seen any response to Andrew and Mabster’s questions above re: FeedWatcher and FeedFolderWatcher, and have been running into the same problem.


    Dim rssEvents As Object

    rssEvents = CType(msFeedMgr.RootFolder, IFeedFolder).GetWatcher(FEEDS_EVENTS_SCOPE.FES_ALL, _


      AddHandler CType(rssEvents, FeedFolderWatcher).Error, AddressOf RSSPlatformEvent_Error

    … generates the error "Unable to Cast COM object of type ‘System.__ComObject’ to interface type Microsoft.Feeds.Interop.FeedFolderWatcher"

    However, when I insert the line: = "FeedFolderWatcher" Then

                   test = CType(rssEvents, FeedFolderWatcher)

               End If

    I see that the object IS a FeedFolderWatcher object.

    Any ideas?