Blog Home  Sign In RSS 2.0 Atom 1.0 CDF  

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

  knownType_Serialize, about = Softwaremaker()
 

 Saturday, May 27, 2006

Here I am - proud to announce that I will be doing a MSDN Redmond-hosted Webcast right from the other side of the hemisphere in Singapore.

I will be speaking on concepts of Reliability in Soap:Web Services, why its needed, as well as the context of it in Windows Communication Foundation (WCF, previously - Indigo).

More importantly, a 40GB Creative (another homegrown Singaporean product) ZEN MP3 player is at stake here waiting to be won. So, do sign up quickly for a chance to win this. Rules here.

If you are one of those insomniacs in Asia-Pacific, do try to tune-in. I hope this blazes a trail for the other community leaders in Asia-Pacific to follow suit and show that we are right on par there with the best in technology.

Click here for more details on this webcast.

Saturday, May 27, 2006 6:03:37 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer 
  • Blog reactions

  • Via Newark - on an Airbus 340.

    NOT exactly very excited on this LONG trip though ... No prizes for guessing where I am going though. Here are some stats for the event.

    • 1,250,000 pieces of "Mikes & Ikes" will be consumed over the course of a week at Tech Ed 2006
    • 18,750 pounds of salad will be prepared and offered at meals
    • 83,700 ice cream novelty/ fruit and yogurt bars have been ordered for this function
    • 60,000 eggs will be eaten by attendees at breakfast (this is equal to 4,800 dozen cartons of eggs)
    • It will take 4 semis to transport the 150,000 bottles of water consumed on this show
    • The total amount of fruit ordered will fill 3/4 of full size tractor-trailer
    • 1.6 million ounces of coffee will be poured and consumed (conservative estimate)
    • More than 50,000 pounds of carbohydrates will be consumed at Tech*Ed (Atkins who?)
    • 1,500 table cloths will be used and re-set on a daily basis:  (7,500 for the week)
    • A minimum of 2,000 antacid tablets are likely to be consumed at this event

    Talk about Americans being number-crazy-crunchers.

       

    Saturday, May 27, 2006 6:02:19 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer 
  • Blog reactions

  •  Thursday, May 18, 2006

    I came across this story:

    An 80 year old man was sitting on the sofa in his house along with his 45 years old highly educated son. Suddenly a crow perched on their window.

    The Father asked his Son, "What is this?"

    The Son replied "It is a crow".

    After a few minutes, the Father asked his Son the 2nd time, "What is this?"

    The Son said "Father, I have just now told you "It's a crow".

    After a little while, the old Father again asked his Son the 3rd time, What is this?"

    At this time some ex-pression of irritation was felt in the Son's tone when he said to his Father with a rebuff. "It's a crow, a crow".

    A little after, the Father again asked his Son t he 4th time, "What is this?"

    This time the Son shouted at his Father, "Why do you keep asking me the same question again and again, although I have told you so many times 'IT IS A CROW'. Are you not able to understand this?"

    A little later the Father went to his room and came back with an old tattered diary, which he had maintained since his Son was born. On opening a page, he asked his Son to read that page. When the son read it, the following words were written in the diary :- "Today my little son aged three was sitting with me on the sofa, when a crow was sitting on the window. My Son asked me 23 times what it was, and I replied to him all 23 times that it was a Crow. I hugged him lovingly each time h e asked me the same question again and again for 23 times. I did not at all feel irritated I rather felt affection for my innocent child".

    While the little child asked him 23 times "What is this", the Father had felt no irritation in replying to the same question all 23 times and when today the Father asked his Son the same question just 4 times, the Son felt irritated and annoyed.

    So..

    If your parents attain old age, do not repulse them or look at them as a burden, but speak to them a gracious word, be cool, obedient, humble and kind to them.

    While I could be mean and say that the instances and circumstances are different or the moral of the story is to ask your 3-year old son to shuddup as well - that is not the point. I have got to remember this story.

    Although, I will stop short when my father (or even my son) asked me more than 2 times what are namespaces in XML ...

    Thursday, May 18, 2006 6:00:21 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer 
  • Blog reactions

  •  Tuesday, May 16, 2006

    Apache Axis2/C version 0.91 has been released via here:
    http://ws.apache.org/axis2/c/download.cgi

    Key Features

    1. AXIOM, an XML object model optimized for SOAP 1.1/1.2 messages with complete XML Infoset support
    2. Support for One-Way Messaging (In-Only) and Request Response Messaging (In-Out)
    3. Module architecture, mechanism to extend the SOAP processing model
    4. Context hierarchy
    5. Directory based deployment model
    6. Raw XML providers
    7. WS-Addressing, both the submission (2004/08) and final (2005/08) versions
    8. Transports: HTTP * Both simple axis server and Apache2 httpd module and * SSL client transport - New
    9. Service Groups - New
    10. Service client and operation client APIs - New
    11. REST support (POST case) - New
    12. Module version support - New
    13. MTOM support - New

    Other notes

    1. Interoperability tested with Axis2/Java for XML in/out client and services
    2. Addressing 1.0 interoperability

    Major changes since last release

    1. Full Addressing 1.0 support
    2. Improved fault handling model
    3. SSL client transport
    4. MTOM implementation
    5. Implementation of easy to use service client and operation client APIs for client side programming
    6. REST support (POST case)
    7. Module version support
    8. Service groups
    9. Numerous bug fixes since last release

    Un-Implemented Architecture Features (TBD in 1.0)

    1. Sessions scoping for application, SOAP, transport and request levels
    2. Different character encoding support
    3. Dynamic invocation
    4. Archive based deployment Model

    Un-Implemented Architecture Features (TBD post 1.0)

    1. WSDL code generation tool for stub and skeletons (based on Java tool)
    2. Security module
    3. REST (REpresentational State Transfer) support (GET case)
    4. Web Services policy support
    5. Axis2 Web application (Web App)
    Tuesday, May 16, 2006 5:59:18 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer 
  • Blog reactions

  •  Sunday, May 14, 2006

    I will be one of the first to admit I am a private person. Very few people know me well. And even lesser know that I am so NOT an arachnophobic

    I have loved spiders since I was a young boy in school and has always breed and kept champion Asian Black-n-White fighting spiders (see figure below).

    AsianBWFightingSpider.jpg

    One of the things that Singapore is not so well-known for is its nature (or lack thereof). While I would not argue with that fact, there are a few places in Singapore that still spouts unspoiled nature, if you know where to find it. The problem is that, nature-lovers will not tell you where to find it since they would want to maintain the unspoiled bit of it.

    I have spend almost every weekend for the last few months combing our sunny island-state for nature. While I would say we lose out to our neighbouring country for that, there are still some treasure spots.

    I came across this nice spider that is getting really fat and big off its feeds from its perfect web in a mosquito-infected nature spot which I came across while hunting.

    HiddenSpiderInSingapore.JPG

    I wasnt able to get too up close to this lovely. But I believe it is this beauty:

    Spider01250.jpg

    Ah ... the glorious sight of nature. I really need to get away from the computer a lot more.

    Sunday, May 14, 2006 11:43:33 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer 
  • Blog reactions

  •  Wednesday, May 10, 2006

    Fellow Microsoft Regional Director and well-known distributed systems expert Matevz Gacnik has a great blog to add on top of mine called: Windows Workflow Foundation: Exposing Workflows as Services. Trust me, Matevz is a lot more than Request-Response or what his blog suggested .

    In it, he explains some of the ways you can do so and the pitfalls to watch out for. Of course, you can get around the "workflow runtime can only get loaded once per appdomain" issues by having it static to the service implementation class OR if you want only one instance of each - Windows Communication Foundation (WCF, previously - Indigo) also gives you a singleton-like instancing mode as well - InstanceContextMode:=InstanceContextMode.Single.

    (I would be interested to find out the naming convention to call it Single in the latest CTP instead of Singleton)

    My tip highlighted here is not really about exposing workflows as services. It is more about how you can hook a workflow into a already-hosted WCF service as part of its configured behavior, if need be. For example, you may want to have a non-intrusive workflow for you to raise an event that calls into your defined HandleExternalMethod (called EventSink before) and then you may just terminate that activity. The reason is because the workflow thread doesnt return unless you called a WaitHandle.Set, which you can call when a workflow is completed or terminated.

    Having said all that - Remember that most of the current implementations of Web Services today work on a Request-Response model and many more are betting on that it will remain like that for a long time. Isnt this one of the reasons we have long arguments of POX/REST ? Workflows, on the other hand, are made to handle long running work and therefore, you need to design and handle both properly as its design principles and most-used implementations do conflict.

    Now, if you forsake the Request-Response model and think about the wonderful partnership and the options abound once you hit <OperationContract(IsOneWay:=True)> on top of the MSMQ transport, Windows Workflow Foundation (WF) + Windows Communication Foundation (WCF, previously - Indigo) does look very delicious and promising indeed.

     

    Wednesday, May 10, 2006 10:21:25 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer 
  • Blog reactions

  •  Monday, May 08, 2006

    One of the common questions I came across my Windows Workflow Foundation (WF) and Windows Communication Foundation (WCF, previously - Indigo) consultancy tour is how do we logically use WF inside a WCF-hosted service.

    I had spent some time talking about how we can host a WF in a WCF:ServiceHost and how we can create a channel to invoke a workflow inside a WCF Service.

    Of course, we can always bring up a Workflow runtime and create a new workflow instance within the ServiceHost. However, some of us may prefer a more non-intrusive mode of a workflow invocation style.

    There are actually many extensible points at the Service Dispatcher which you can hook into that is part of a service behavior. There is the IServiceBehavior, IOperationBehavior and one of my favourite extensible behavior points I like to hook into is at the IEndpointBehavior.

    For instance, you may want to inspect a message in its raw glory and depending on its headers or the request properties, you may choose to invoke an appropriate action or workflow. You would need to implement the ApplyDispatchBehavior routine which gives you acccess to an EndpointDispatcher, which in turn, gives you a chance to implement a IDispatchMessageInspector. The IDispatchMessageInspector exposes some very useful routines which allows you to hook into the request message just after it has been received as well as before sending the reply message back.

    I would probably inspect the messages at this point and invoke the appropriate workflow and send the appropriate values into the ExternalDataEventArgs of the workflow based on the message values.

    Of course, this is not a hard and fast rule. How and when you do it is totally up to you. You may want to do it at the IOperationBehaviour and have the message dispatched to another entirely different operation if you want to (or if you dont agree with how WCF dispatches its messages).

    Below are some snippets that will help you along. I will be going more in-depth into these details in TechED Asia 2006 in Malaysia where I will show some really cool never-seen-before demos that is a mixture of WF and WCF. If you havent planned to be be there at TechED Asia 2006, do so now !

    Namespace Softwaremaker.NET.Wcf.Demos
    Public Class WcfMessageInspectorWorkflowInvoker : Implements IDispatchMessageInspector

    Public Sub New()
    MyBase.New()
    End Sub

    Public Function AfterReceiveRequest(ByRef request As Message, ByVal channel As IClientChannel, ByVal instanceContext As InstanceContext) As Object Implements IDispatchMessageInspector.AfterReceiveRequest
    Try
    'Inspecting Message Request ...
    'Invoking appropriate Workflows based on values found in request message
    Catch e As Exception
    Throw New FaultException(e.Message)
    End Try
    Return Nothing
    End Function

    Public Sub BeforeSendReply(ByRef reply As Message, ByVal correlationState As Object) Implements IDispatchMessageInspector.BeforeSendReply
    Try
    'Inspecting Message Reply ...
    'Invoking appropriate Workflows based on values found in reply message
    Catch e As Exception
    Throw New FaultException(e.Message)
    End Try
    End Sub
    End Class

    Public Class WcfMessageInspectorWorkflowInvokerBehavior : Implements IEndpointBehavior

    '...

    Public Sub ApplyDispatchBehavior(ByVal serviceEndpoint As ServiceEndpoint, ByVal endpointDispatcher As EndpointDispatcher) Implements IEndpointBehavior.ApplyDispatchBehavior
    endpointDispatcher.DispatchRuntime.MessageInspectors.Add(New WcfMessageInspectorWorkflowInvoker)
    End Sub

    '...
    End Class

    What I have described above is a good way to abstract how and when you invoke a workflow away from your WCF-Hosting or business code. How do I add this behavior into my serviceHost ? Easy. Just call the below before your serviceHost.Open

    serviceHost.Description.Endpoints(0).Behaviors.Add(New Softwaremaker.NET.Wcf.Demos.WcfMessageInspectorWorkflowInvokerBehavior)

    Now, if you decide that the above code sentence intrudes into your hosting code and you would like it to be configured in your config file for flexibility as well, I will show in a later blog post how to add your own custom-defined behaviorExtension into your configuration file. Think: BehaviorExtensionSection.

    ... OR you can always go to TechED Asia 2006 in Malaysia where you sure would derive more value than a single non-interactive blog post.

    Enjoy.

    Monday, May 08, 2006 5:12:54 AM (Malay Peninsula Standard Time, UTC+08:00)  #    Disclaimer 
  • Blog reactions