It's 2008. Where's my flying car? RSS 2.0
 Thursday, July 17, 2003

This here is not Radio.

Thursday, July 17, 2003 4:39:15 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [6] - Trackback
Blog
 Friday, July 11, 2003

Quake II on .NET. Scott Stanfield and his team at Vertigo Software show yet another nice trick: Quake II in managed code.

Friday, July 11, 2003 2:07:09 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
CLR
 Thursday, July 10, 2003

I couldn't find one, so I made a WS-PolicyAttachment UDDI bootstrap file for import into Windows UDDI Services.

When I put that together, I ran into a bug in the spec. Point 5.1 shows the tModel for the remote policy reference. The tModelKey shown there is

<tModel tModelKey="uuid:0b1b5a47-bebf-3b7d-9802-f2dd80a91adebd3966a8-faa5-416e-9772-128554343571">

which is a bit long for a uuid, isn't it? Correct is the following (as the spec later explains):

<tModel tModelKey="uuid:0b1b5a47-bebf-3b7d-9802-f2dd80a91ade">

The bug even survived the revision from 1.0 to 1.1, which makes me wonder whether anyone ever reads these specs in any depth

Thursday, July 10, 2003 10:49:57 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Web Services | Technology | UDDI
 Wednesday, July 09, 2003
This bit of news retires one of my talks ;)
Wednesday, July 09, 2003 7:47:08 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

Current output of this is that:

---------------
Feed Name: Clemens Vasters: Enterprise Development & Alien Abductions
Access Point:
http://radio.weblogs.com/0108971/rss.xml
RSS Version: 2.0
Description: Clemens Vasters' Weblog, Language: en
Press any key to continue

Wednesday, July 09, 2003 7:01:26 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Technology | UDDI

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);
                    }
                }
            }
        }
    }
}

Wednesday, July 09, 2003 4:19:04 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [1] - Trackback
Technology | UDDI

H2/2003, moving up one notch on the WS stack.

Yesterday, all the travel madness of H1/2003 which begun in January has officially ended. I have a couple of weeks at the office ahead of me and that's, even if it may sound odd, a fantastic thing. The first half of the year and quite a bit of last year too, I spent most of my research time working deep down in the public and not-so-public extensibility points of Enterprise Services and Web Services, trying to understand the exact details of how they work, figuring out how to inject more and tweak existing functionality and whether certain development patterns such as AOP could enhance the development experience and productivity of my clients (and all of you out there who are reading my blog). I've been in 21 countries in this first half of the year alone and at about 40 different events, talking about what I found working with these technologies on some more and some less serious projects and doing that and speaking to people I learned a lot and I also think that I helped to inspire quite a few people's thinking.

Now it's time to move on and focus on the bigger picture. Starting with version 2.0 of Microsoft Web Service Enhancements that's due out by end of this summer, Web Services will finally become less Web and more Services. The WSE 2.0 stack will break the tie between HTTP and SOAP by enabling other transports and they'll add support for some of the most important WS-* specs such as WS-Policy, WS-Addressing and related specs. The now released UDDI services in Windows Server 2003 put a serious local UDDI registry at my fingertips. BizTalk Server 2004's new orchestration engine looks awesome. There's a lot of talk about Service Oriented Architectures, but too less to see and touch for everyone to believe that this stuff is real. I think that's a good job description for H2/2003. My UDDI provider key: 7f0baedf-3f0d-4de1-b5e7-c35f668964d5

Wednesday, July 09, 2003 4:05:25 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Web Services | Technology | UDDI
 Friday, July 04, 2003

Rafal is God.

We're at the speaker hotel looking at the final speaker scores with a group of people including David Platt, Kimberly Tripp, Juval Löwy and Gert Drapers. Rafal Lukawiecki did the four highest ranked sessions of TechEd Europe. The four top spots of all speakers and sessions, all him. The highest was 8.58 out of 9. With 288 attendees responding. That's just unbelievable and it is really, really well deserved, because Rafal is just awesome. We all agree that when it comes to technical presentations, Rafal is God.

Friday, July 04, 2003 9:34:14 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Talks
 Thursday, July 03, 2003

I am party incompatible ... ummm... no, my session schedule is party incompatible, says Lorenzo. The good news is: My talk this afternoon at 18:15 (DEV387) is going to be pretty light compared to yesterday ;) The session is on "Layers & Tiers" in distributed systems and I'll explain the difference between the two terms, will talk about a broad idea about what a service in an SOA world is and will talk about proper treatment of data and about using data services and about communication patterns and contracts. Very conceptual talk and only one quick (prebuilt) demo to illustrate the concept of "smart" data services.

Thursday, July 03, 2003 4:53:32 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Talks | TechEd Europe

WEB404 post-mortem

My talk on web services internals like custom reflectors and importers and format extensions went well -- for what I wanted to achieve. However, based on the audience feedback there was definitively a spread between good and bad in terms of customer experience and most of the critical comments are related to the demo (of course). Here's two out of about 40 feedback comments I got :

  • The speaker had quite a few surprises with his own code during the demo, giving the impression that what he proposed was rather a problem than a solution. The techniques shown looked very powerful, though.
  • sorry about all the demo problems, I hope practicing the demos 3times more before the next time will help.

What's interesting about these two is that everything actually worked and failed just as expected. I was running into "problems" that were there by intent in order to introduce the next step to get the solution going. Whenever I do a coding session (and I think it was appropriate to do that for this session) it is not even my intent to make it all look as if the sun would always shine and everything were easy and works with two mouse clicks. It's not. It's work. Also, I needed good reasons to go into the debugger and show appropriate debugging techniques -- essential for writing importers. But it's always pretty difficult to make it right for everybody, especially with level 400 talks on very complex matters where you need to cover a lot of ground.

Here's the link to the Soap Extension Wizard once more.

 

Thursday, July 03, 2003 4:45:11 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [1] - Trackback
Talks | TechEd Europe
Here is the sample code I used for the WEB400 talk about loose coupling here in Barcelona today. To get it to run you need to create virtual directory for the "web400" directory and move the person.xml file into client\bin\debug.
Thursday, July 03, 2003 4:14:17 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Talks | TechEd Europe
 Wednesday, July 02, 2003

Barcelona, WEB404 and a new build of the SDK

I still have almost 2 hours until my session on ASP.NET Web Services (ASMX) internals at 18:15 in Room 7. I am going to talk mostly about extensibility and about writing custom "reflectors" (which let you tweak the WSDL spit out by ASMX) and "importers" (which let you tweak the code emitted by 'Add Web Reference'). For a change, I will basically start with a blank project and implement a complete SoapExtension with Reflector and Importer live (I had a canned sample in Dallas) and then show a couple of other goodies that are in the newtelligence SDK bag. 

I just put build 2.2.3173.0 of the newtelligence SDK onto our download site. Read the readme first and then download the MSI file to install the SDK, if you are interested. I will likely show the schema extensions, management extensions and session extensions.

The schema extensions are actually a new thing that I've implemented a couple of weeks ago. The SchemaTypeReflector class tweaks the schema that's being emitted into the WSDL by ASP.NET so that it turns this class definition (if the class is used as a parameter to a web method):

[Serializable]

[System.Xml.Serialization.XmlTypeAttribute(
Namespace="urn:newtelligence-com:samples:northwind:purchaseorder:v1")]

public class orderType

{

public int OrderNumber;

[Match(@"[A-Z]+"), MaxLength(5)]

public string CustomerCode;

public System.DateTime OrderDate;

public System.DateTime RequiredDate;

[System.Xml.Serialization.XmlIgnoreAttribute()]

public bool RequiredDateSpecified;

[Match(@"\p{L}[\p{L}\p{P}0-9\s]*")]

[MaxLength(40)]

public string ShipName;

[Match(@"\p{L}[\p{L}\p{P}0-9\s]*")]

[MaxLength(60)]

public string ShipAddress;

 

...

 

 

}

into a schema type definition like this:

<s:complexType name="orderType"> 
- <s:sequence>
  <s:element minOccurs="1" maxOccurs="1" name="OrderNumber" type="s:int" />
- <s:element minOccurs="0" maxOccurs="1" name="CustomerCode">
- <s:simpleType>
- <s:restriction base="s:string">
  <s:pattern value="[A-Z]+" />
  <s:maxLength value="5" />
  </s:restriction>
  </s:simpleType>
  </s:element>
  <s:element minOccurs="1" maxOccurs="1" name="OrderDate" type="s:dateTime" />
  <s:element minOccurs="0" maxOccurs="1" name="RequiredDate" type="s:dateTime" />
- <s:element minOccurs="0" maxOccurs="1" name="ShipName">
- <s:simpleType>
- <s:restriction base="s:string">
  <s:maxLength value="40" />
  <s:pattern value="\p{L}[\p{L}\p{P}0-9\s]*" />
  </s:restriction>
  </s:simpleType>
  </s:element>
- <s:element minOccurs="0" maxOccurs="1" name="ShipAddress">
- <s:simpleType>
- <s:restriction base="s:string">
  <s:maxLength value="60" />
  <s:pattern value="\p{L}[\p{L}\p{P}0-9\s]*" />
  </s:restriction>
  </s:simpleType>
  </s:element>
- </s:complexType>

The SchemaTypeReflector will walk the type graph of all the parameters passed as an argument. Along with the reflector there is a validator extension that will either do a schema validation on the incoming XML or will check the arguments when they have already been deserialized.  That code is included in the package; check the Source directory in the installation path and look for newtelligence.Web.Services.Schema. For the reflector to work, the type newtelligence.Web.Services.Schema.SchemaTypeReflector must be added to the configuration/system.web/webServices/soapExtensionReflectorTypes section in the web.config.

Having strong contracts with schemas like this makes (amongst many other advantages) for a great combination with InfoPath 2003 since InfoPath honors schema restrictions and puits red squares around editboxes for which the restriction facets are being violated.

Wednesday, July 02, 2003 7:29:02 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Tuesday, July 01, 2003

German Software Legends

A picture named teched2003-aufsteller.jpg

The parodies on the "Software Legends" cardboard cutouts that were all over TechEd Dallas even continues over here in Barcelona. Ralf Westphal had the idea for a quick photo session a few hours ago and actually created a set of cutouts of himself, Christian Weyer, myself and the legend of legends, Juval Löwy (here is the legendary "Cardboard Juval Conquers Dallas" photo series by Stephen Forte).

Tuesday, July 01, 2003 7:40:46 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

ASP.NET Soap Extension Wizard

While preparing for my WEB404 talk on Web Services extensibility tomorrow at 18:15 in Room 7 at TechEd Barcelona, I remembered that I had built this some 9 months ago. So I made a version that works for Visual Studio .NET 2003 and will show that tomorrow. Here's the current zip file, which includes the installation notes. The zip file contains a file 'InstallerUtil.cs' that implements a helper class supporting the installer that the wizard generates. Put it into a utility assembly and reference it. Aside from that, it's just 3 simple steps to get it running.

Tuesday, July 01, 2003 7:16:40 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

Stuff
About the author/Disclaimer

The content of this site are my own personal opinions and do not represent my employer's view in anyway. In addition, my thoughts and opinions often change, and as a weblog is intended to provide a semi-permanent point in time snapshot you should not consider out of date posts to reflect my current thoughts and opinions.

© Copyright 2008
Clemens Vasters
Sign In
Statistics
Total Posts: 717
This Year: 11
This Month: 2
This Week: 1
Comments: 1219
Themes
Pick a theme:
All Content © 2008, Clemens Vasters
DasBlog theme 'Business' created by Christoph De Baene (delarou)