Getting serious about UDDI, Step 1, Update
Getting serious about UDDI, Step 1
If you search uddi.microsoft.com for "Services" by the "RSS - Version 2.0" tModel, there's exactly one entry at this time. Mine. Fix that.
Using the UDDI SDK 2.0 (part of the Platform SDK), the following snippet is a simple console app that lists all weblogs registered with the RSS 2.0 tModel in the Microsoft UDDI registry [thanks to Karsten Januszewski for his doc, tModel bootstrap and code]. The advantage? If aggregators were able to remember my service key instead or in addition to my absolute access point (right now http://radio.weblogs.com/0108971/rss.xml), I could move the RSS feed around to any arbitrary locations without any pain and clients would still be able to find it using a simple lookup into the registry. And the infrastructure is all there. No future thing.
using System;
using Microsoft.Uddi;
using Microsoft.Uddi.TModels;
using Microsoft.Uddi.Services;
namespace ListRSS20Feeds
{
class MainApp
{
static void Main(string[] args)
{
UddiConnection uddiConnection = new UddiConnection();
/* RSS 2.0 tModel key from config */
string RSS20TModelKey = "uuid:bacbe300-4b2b-11d7-bc51-000629dc0a53";
/* setup the UDDI parameters on the connection */
uddiConnection.InquireUrl = "http://uddi.microsoft.com/inquire";
/* create a UDDI FindService and ServiceList objects */
FindService fs = new FindService();
ServiceList sl = new ServiceList();
/* add the rss tModel key */
fs.TModelBag.Add( RSS20TModelKey );
try
{
/* send to uddi */
sl = fs.Send(uddiConnection);
}
catch ( Exception ex )
{
Console.WriteLine( ex.Message );
return;
}
/* create FindBinding and BindingDetail objects */
FindBinding fb = new FindBinding();
BindingDetail bd = new BindingDetail();
fb.TModelBag.Add( RSS20TModelKey );
/* get the bindings */
foreach ( ServiceInfo si in sl.ServiceInfos )
{
/* set the serviceKey */
fb.ServiceKey = si.ServiceKey;
try
{
/* send to UDDI */
bd = fb.Send(uddiConnection);
}
catch ( Exception ex )
{
Console.WriteLine( ex.Message );
return;
}
foreach ( BindingTemplate bt in bd.BindingTemplates )
{
Console.WriteLine(
"---------------\n"+
"Feed Name: {0}\n"+
"Access Point: {1}",
si.Names[0].Text,
bt.AccessPoint.Text);
/* get out the tModelInstanceInfo for the tModelKey
that represents RSS 2.0 and get the version info */
foreach ( TModelInstanceInfo tmii in bt.TModelInstanceInfos )
{
if ( tmii.TModelKey == RSS20TModelKey )
{
if ( tmii.InstanceDetails.InstanceParameters != null )
Console.WriteLine("RSS Version: {0}",
tmii.InstanceDetails.InstanceParameters);
else
Console.WriteLine("RSS Version: n/a");
}
}
if ( bt.Descriptions.Count > 0 )
{
Console.WriteLine( "Description: {0}, Language: {1}",
bt.Descriptions[0].Text,
bt.Descriptions[0].IsoLanguageCode);
}
}
}
}
}
}