Blog Home  Sign In RSS 2.0 Atom 1.0 CDF  

  def Softwaremaker() :
         return "William Tay", "<Challenging Conventions />"

  knownType_Serialize, about = Softwaremaker()
 

 Tuesday, May 31, 2005

Right off the heels from speaking in Software Development and Architectures ASIA .NET Conference, I am speaking in XML Asia 2005 conference this week.

I will be covering 2 topics, one under a business track and the other a technical one.

The technical track will be highlighting on SOAP Message-based security and its related specifications such as _WS-Security Specs_, WS-Trust, WS-SecureConversation, etc

The business tracks will touch on Moving towards Service-Orientation: What is it actually and is it right for you?

This session will cover the facts behind the marketing hype of Service-Orientation and why it is more than just a focus on standards and interoperability. Get a better understanding of one of the hottest buzzwords in IT today as the speaker debunks the myths associated with SO(A).

The guiding principles of Service-Orientation and the impending steps needed to embrace this architectural idea and philosophy will also be explored.

Notice that I highlighted the words highlighting and touch. The speaking sessions are all presented in half an hour slots which really doesnt give much time for demos and such ... and this is a challenge. One of my favourite tagline is this:  “I didnt have time to write you a short letter so I wrote you this long one instead”

Contrary to conventional wisdom, it is not easy to cram all important points and concepts into a 30 minute session and expect to spread the same message to the audience as a 90 minute one.

This ought to be interesting.

Tuesday, May 31, 2005 12:45:51 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [0]
  • Blog reactions

  •  Saturday, May 28, 2005

    This will be interesting ...

    I think I will reserve my comments on this for now.

    Friday, May 27, 2005 11:23:39 PM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [0]
  • Blog reactions

  •  Tuesday, May 24, 2005

    Do your eyes a favour and click on the picture to see the original image in its original size in its full glory. Unbelievable ...

     This is Done In Microsoft MS-Paint

    Tuesday, May 24, 2005 1:19:16 PM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [1]
  • Blog reactions

  •  Monday, May 23, 2005

    Ingo Rammer, the internationally well-known .NET Remoting guru (although I assure you he is a lot more than that ...) was in town for a premier DotNet Conference (Software Development Architecture Asia DotNet Conference 2005) that we are both presenting in.

    You can read about what he is presenting here and what I am doing here.

    I played host to him for about 3/4 of the day. So what do you get when you put Mr WS-* meets up with Mr. .NET Remoting ? >>>

    What do you expect ? Lots of great connectivity and great conversation. On the contrary, technology dominated only about 20 % of the conversation. We chatted about politics, cultures, religions, governmental policies of Europe, Asia and the Americas, mankind, families and the future and to a certain degree > Some good old America-bashing . It was so great to be able to chat and connect with a fellow techie on everything outside of technology. We believe that technology is just a means to an end. Ultimately, it must be able to add values to the way we live and play today. Whether and how it shapes the way we live and play tomorrow will also, very much, depends on the values it creates.

    In other words, we are both business people. I cannot believe how business-oriented this man is. He has depth and wisdom that transcends a person beyond his age and we had such a great insightful conversation outside of technology.

    Being a great internationally-travelled speaker he is, he offered some great advice and tips on travelling speaking assignments which I will be doing more in the immediate and near future. In return, I shared with him some of the (South-East) Asian style and concepts of business dealings, engagements and transactions.

    It was definitely a great day.

    Monday, May 23, 2005 8:57:35 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [0]
  • Blog reactions

  •  Sunday, May 22, 2005

    I had spent an entire day playing host to Ingo Rammer and what a great day it was. I will blog about that later. Deep into the night  (it was 0315 my time), I chatted with Steve Maine over IM on some trivial ramblings of

    1. The role of the Toolset in the Programming Paradigm in the Web Services World. I would not even go near the word "Service-Oriented Architectures". It would take more than a tool kit to do that. Discipline and Best Practices would be closer to that topic.
    2. What would we like to see in the transition of the mindset of the Object-Oriented developer to a Service-Oriented one, especially in the face of the coming of Indigo and WSDL 2.0.

    and he came up with this blog post.

    Steve, you know I kinda knew that would show up on your blog and am NOT surprised to see it written in that form factor as it is. Excellent post and a good way of putting it. Thank you.

    Sunday, May 22, 2005 10:36:40 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [0]
  • Blog reactions

  • In some of my presentations, I had frequently preached one of the ways I do SOAP Application Versioning is to have multiple wsdl:ports with the same location.

    Apparently, this has caused some exceptions thrown by WS-Basic Profile 1.0  Conformance Toolkits such as this and people are questioning me why. Fellow Web Services Expert and Enthusiast, Christian Weyer questions this as well here in his post.

    Let me clarify by saying that there are more than one ways to skin a cat. What I practiced is a guideline I have gathered from field experience.

    Let us take a look at the specific appropriate section of the Basic Profile 1.0:

    5.6.8 Multiple Ports on an Endpoint
    When input messages destined for two different wsdl:ports at the same network endpoint are indistinguishable on the wire, it may not be possible to determine the wsdl:port being invoked by them. This may cause interoperability problems. However, there may be situations (e.g., SOAP versioning, application versioning, conformance to different profiles) where it is desirable to locate more than one port on an endpoint; therefore, the Profile allows this.

    R2711 A DESCRIPTION SHOULD NOT have more than one wsdl:port with the same value for the location attribute of the soapbind:address element.

    As stated above, althought the recommendation is "SHOULD NOT", the Basic Profile 1.0 clearly allows this.

    Of course, this may mean certain tradeoffs such as interoperability issues with other toolkits which I think can be solved by being explicit about the differences in wsdl:port names and bindings attributes.

      [service name="UltimateServiceIndex"]
          [documentation]Softwaremaker ROCKS[/documentation]
          [port name="index1" binding="s0:index1"]
             [soap:address location="http://demos.softwaremaker.net/someVDir/UltimateIndex.asmx" /]
          [/port]
          [port name="index2" binding="s1:index2"]
             [soap:address location="http://demos.softwaremaker.net/someVDir/UltimateIndex.asmx" /]
          [/port]
       [/service]

    On the same note, it is important to note this in the Basic Profile:

    ... that conformance does not apply to a service as a whole; only ports are considered when determining conformance of instances. Therefore, the Profile places no constraints on wsdl:service definitions. In particular, they can contain multiple wsdl:port elements, each of which may or may not be conformant ...

    ... Since wsdl:service elements are not necessarily mapped to a single uddi:businessService and are also not subject to conformance claims, it would be unclear what it meant if a uddi:businessEntity or a uddi:businessService element were to claim conformance with the Profile ...

    One of my best recommended practice of designing a good WSDL file is to abstract away the wsdl:service wsdl:port endpoint away from the interfaces at design time. Endpoints should be discoverable at configuration or run-time, whether it is through an UDDI:type-Registry or a 3rd party Service Broker or an old fashioned out-of-band communication mechanism. This allows multiple instances of a web service interface to be able to do a failover / load-balancing approach.

    Sunday, May 22, 2005 2:33:47 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [0]
  • Blog reactions

  • I hope this turns out better than this.
    Saturday, May 21, 2005 6:53:09 PM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [0]
  • Blog reactions

  •  Saturday, May 21, 2005

    I know it is supposed to be here. However, I think it is taking some time to propagate to the server farms. So, just stay tuned.

    If it still doesnt work after some time, may want to try this: http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=b789bc8d-4f25-4823-b6aa-c5edf432d0c1&genscs=0&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2ff%2fa%2f3%2ffa3b19ba-6129-41e8-93d8-498cc6b52b14%2fwinfxsetup.exe

    Something that is rather useful that is gathered from the usergroups:

    ... found a logfile (dd_indigo_retMSI60A6.txt) with the following entry:

    MSI (s) (B0:1C) [12:29:27:752]: MainEngineThread is returning 1638
    Another version of this product is already installed.  Installation of this
    version cannot continue.  To configure or remove the existing version of
    this product, use Add/Remove Programs on the Control Panel.
    {C350D87C-7B67-43E2-B717-E9ADABE2F631}

    So I ran this command:

    msiexec /x {C350D87C-7B67-43E2-B717-E9ADABE2F631}

    and now the Indigo setup worked! It will probably work for you as well!

    Saturday, May 21, 2005 1:42:23 PM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [1]
  • Blog reactions

  •  Saturday, May 14, 2005

    Jay,

    This appeared in print in one of our local news publications a few months back. I am very sure this would make it to your Headlines segment of the Tonight Show. C'mon, it IS funny...

    280 Year Old Depressed Man

    Saturday, May 14, 2005 1:03:51 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [1]
  • Blog reactions

  •  Monday, May 09, 2005

    I was recently quoted in the press talking about OSS vs. proprietary platforms and solutions. It appeared in the IT Lifestyle Section (Digital Life) of our national newspaper --- The Straits Times 03 May 2005

    I had said, and I quote:

    ... mutivendor expertise and support may be hard to come by for Linux and OSS. And these can add up to a higher total cost of ownership compared to pre-packaged Windows ...

    Please click here to see the exact article in pdf form.

    MyQuoteInThePress

    Monday, May 09, 2005 9:52:32 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer  Comments [4]
  • Blog reactions

  •  Thursday, May 05, 2005

    Fellow Microsoft Regional Director and a software legend, Rocky Lhotka posted an interesting entry on Message-based WebMethod "overloading" here.

    In it, he recommends (and I quote) that service methods use a request/response or just request method signature: 

       response = f(request)

    or

       f(request)

     "request" and "response" are both messages, defined by a type or schema (with a little "s", not necessarily XSD).

    The actual procedure, f, is then implemented as a Message Router, routing each call to an appropriate handler method depending on the specific type of the request message.

    I couldnt agree more. While easier to comprehend, the practice of passing parameters to a Web Method call often sends the wrong messages across as (W3C) SOAP as just another RPC. Ultimately, if you have no idea and dont even want to grok the innards of the XMLSerializer, you would really think you are passing method parameters across or worse, think that you are ferrying objects across the wire.

    Therefore, I firmly believe that it is for the good of all if you explicity specify that you are expecting a XMLDocument / XMLElement / XMLNode and you will dispatch the same on your endpoint. What you do at your implementation (whether it is serializing from a type to deserializing from one) is placed squarely at the mercy of the tools in your hand or the knowledge in your head.

    With the current state of tools (or lack there-of) today, I sit on the same camp as Aaron Skonnard and Christian Weyer (plus others, I believe) as I believe firmly in the contract-first approach. Good devs should dig what is going on as close to the wire as possible, at least once. Then they can use all the wizards and helpers they want. This will help them understand better what is going on if they should need to troubleshoot later (leaky abstractions) or find other ways to improve performance.

    This is just something that my team and me here have gathered over the years esp when I have got many developers out there working on the same solution offshore in different countries.

    While I agree that not many people out there enjoy or want to grok the angle brackets and that the lack of tools out there is hugely to be blamed, tools make a productive developer but not necessarily a proficient one.

    Until today, I still come across developers that still think Web Services are still about transferring an object across the wire. Having terms like "Web References" and "proxies", even deemed to be more abstract and dev-friendly, does potray the wrong ideas across.

    I have always recommended younger developers who are interested in learning about Web Services / ASMX and SOAP to try out the (just-now-defunct) Microsoft SOAP Toolkit first before moving on. I find that to be a great interesting way to learn about XML SOAP Services as abstractions are kept to a minimum. Another great SOAP Toolkit in the face of Microsoft's non-supporting stance of its own is Simon Fell's PocketSOAP.

    Another fellow Regional Director, Bill Wagner (who authored an very impressive book "Effective C#") posted his solution to Rocky's post here. I have used the same sort of approach that Bill had documented before and it is good and does serve its purpose. However (and please correct me if I am wrong), it bounds the message contracts and datatypes tightly to the WSDL. If I am going to add a third Request / Response pair of classes, it will render my initial WSDL invalid (unless of course, if I am willing to add an additional endpoint)

    I worked on a project before which specify that (newer) datatypes are to be added in phases and therefore, we had to decouple the XSD from the WSDL (which is in accordance with one of the best practice of WSDL Deployments -- modular and the separation of concerns). Oh, by the way, this is practiced in Indigo.

    I don't know if there is a way to decouple the XSDs from the WSDL in VS2003 today. Even if there is, I am guessing it is a difficult hack at best. So, what I did was to create the XSDs for each datatype as they come along and do a XSD import in my WSDL. At my message exchange contract, I used an open content type with xsd:any. Thereafter, I author my own WSDL with the help of Christian's and Thinktecture's WSContractFirst. Since the message and the datatype XSDs are all imported, the wsdl actually has a small footprint now. With the wsdl /server switch, xsd:any becomes an XMLElement type. For abstraction within my service, I changed it to an object in my implementation detail.

    Note: .NET 1.1's WSDL.exe /server switch, in my mind, is still fairly limited and comes with a couple of annoying things I didn't like BUT I will expand this in detail later.

    [System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:softwaremaker-n
    et.swmstoreexchangemessages"]> _
    Public Class Response
      Public Result As Result
    End Class

    [System.Xml.Serialization.XmlTypeAttribute([Namespace]:="urn:softwaremaker-n
    et.swmstoreexchangemessages")] _
    Public Class Result
      [System.Xml.Serialization.XmlElement(ElementName:="Book",
    Type:=GetType(BookType),
    Namespace:="urn:softwaremaker-net.swmstoreextendedtypes"), _
      System.Xml.Serialization.XmlElement(ElementName:="CD",
    Type:=GetType(CDType),
    Namespace:="urn:softwaremaker-net.swmstoreextendedtypes"), _
      System.Xml.Serialization.XmlElement(ElementName:="Anything",
    Type:=GetType(AnyType),
    Namespace:="urn:softwaremaker-net.swmstoreextendedtypes")] _
      Public Any As Object
    End Class

      Public Function
    ProcessRequest([System.Xml.Serialization.XmlElementAttribute([Namespace]:="u
    rn:softwaremaker-net.swmstoreexchangemessages")] ByVal Request As Object) As [System.Xml.Serialization.XmlElementAttribute("Response",
    [Namespace]:="urn:softwaremaker-net.swmstoreexchangemessages")] Response
       '...
       End Function

    Once the consumer points to my wsdl