Web Services, XSD, WSDL and Versioning …

I’m working on a web service providing user application authorization information based on web service. The basic idea is to expose application authorization data through a web service and remove any need to implement similar functionality in each application and centralize the administration of user profiles and authorizations.

Like any other web services once deployed, all applications will be dependent on this basic user authorization services. It requires that the authorization service must offer backward compatibility and extensibility to support applications that live on their own life cyles.

A versioning strategy is shown in the following:

  • All types are defined in XSD and their namespaces are date-stamped. Ex.,
    <s:schema

          xmlns:s=“http://www.w3.org/2001/XMLSchema”

          targetNamespace=“http://tempuri.org/2004/02/16/types/”

          xmlns=“http://tempuri.org/2004/02/16/types/”

        >

         <s:complexType name=“User”>

           <s:sequence>

                  <s:element name=“FirstName” type=“s:string”/>

                  <s:element name=“LastName” type=“s:string”/>

           </s:sequence>

         </s:complexType>

    </s:schema>
  • All WSDL are stored as files that reference the XSD for exposing types. Ex.,
    <definitions

        name=“UserAuthorizationService”

        targetNamespace=“http://tempuri.org/2004/02/16/UserAuthorizationService/”

        xmlns=“http://schemas.xmlsoap.org/wsdl/”

    >

        <import namespace=“http://tempuri.org/2004/02/16/types/”

         location=“UserAuthorization.xsd” />

        <types />

        <message />

       <portType />



       <!– concrete definitions –>

       <binding />

       <service />

    </definition>



  • When implementing web services, the binding is done with import of a particular WSDL such as http://localhost/2004/02/16/UserAuhtorizationService.wsdl, insetad of relying on ASP.NET auto-generated WSDL on an endpoint.
  • When the service interface changes, a new WSDL is created and a new endpoint is created as well for the new interface. Ex, these are two versions of the service with two distinct endpoints.
  • http://localhost/2004/02/16/UserAuthorizationService.wsdl and http://localhost/2004/02/16/UserAuthorization.asmx
  • http://localhost/2004/03/UserAuthorizationService.wsdl and http://localhost/2004/03/UserAuthorization.asmx
  • Here’re some related resources:
    Designing Application-Managed Authorization
    XML Versioning

    Mono 0.30

    I spent two hours trying to build Mono 0.30 release on my Linux box last night. I built Mono runtime successfully, but could not get Mod_Mono for Apache 2 to compile without rebuilding Apache 2. Since I’m still running RedHat 8, the RPM binary build for Mono 0.30 can not be used. I don’t follow Linux very closely, it always takes me a while to get up to the speed with the latest development, so I’m reluctant to upgrade to the latest distribution. My goal is to get Mono .30 and Apache 2 work on my Linux box without making any change other than Mono itself.

    On the other note, my new multi-functional printer was delivered yesterday from buy.com. I orrder it first on buy.com, then found out that amazon.com had better deal. I cancelled the buy.com order and ordered one from amazon.com. However, amazon.com messed up my order and shipment, I had to email them many times to get full credit back. Finally buy.com had the printer at $375.99 again and I ordered it right away. I like everything I see from the printer except that it dims my home office’s light bulb when operating. It is a big power sucker drawing almost 1KW juice.