I’ve been tagged…5 things you don’t know about me…

I’ve been tagged…5 things you don’t know about me…

Mick Badran tagged me. I’ve been procrastinating doing this, but i’m scared that i might bring an evil pox on myself if i break the sacred chain…or some such hokey pokey.

The idea is that i reveal 5 things about myself and then tag 5 other people. I wonder if the person that devised this scheme realises that with that level of exponential growth the whole blogosphere will be tagged and then people will be forced to retag people and then those people will have to find 5 more things to blog about and then tag 5 more people who have already been tagged and eventually it leads to a HIGH CPU state where the entire blogosphere maxs out the CPU thread pool on this “taggingphenomonon” eventually taking out large sections of the interwebs as blogs just become echo chambers of 5 more things that people don’t care about and thenthe Time Magazine’s person of the Year for 2006 becomes”The idiot whodestroyed the internet with his blathering and ended global civilisation in 2007″.

Anyway, here are my 5 things you don’t know about me.

  1. I spent two years living in China, and speak a pretty good intermediate level of Mandarin (Putonghua). At the apex of my chinese character study i could probably recognise 1000 characters. Now, because i’m out of practise, i’d struggle to accurately recognise 200. Now i see alot of Chinese characters and say to myself “I used to be able to read that”.
  2. Just before starting at Microsoft I came this close (holding my forefinger and thumb a paper’s width apart) to chucking in my IT career and studying law. Iwas accepted into Uni and everything. In the end i decided to proceed with my career in IT as I didn’t want to live as a broke student for 2-3 years followed by another few years as a broke law clerk or some such. Now I’m glad i didn’t.
  3. I’m proud New Zealander. As a New Zealander living in Australia I’m often forced to watch All Black vs Wallabies matches with theTV on mute because the biased Australian commentators ruin the whole experience.
  4. My Great Uncle was the Captain of an airlinerthat went missing in the “Bermuda Triangle” in 1949. The wreckage and 5 search planes that went out after it were never seen again. My son’s middle name is after him.
  5. In my early teenage years I had 20-25 houses in my lawn mowing “business”. During the summer months I made upto $150 a week (thats alot of money when you’re 12) which was enough money to cover my Amiga-500-games-and-accessories habit.

The five people i’m tagging are:

Ah…no one. Everyone i know has already been tagged. I looks like I’m going to be a terminating node.

BizTalk domain name for sale

BizTalk domain name for sale

I own an A Class BizTalk domain name which i’m thinking of selling. The domain is http://biztalk.ms. Click the link and check it out.I have a holding site there. This would be an excellent blog site or site for a company specialising in BizTalk. If you’re interested in purchasing this domain nameemail me atmarkATbiztorqueDOT.net with your offer.

ASP.NET AJAX 1.0 Released

Scott announced this morning that the final release of ASP.NET AJAX shipped this morning.


There are already a number of sites out there using the framework. Some of the more recognisable ones are the Live Image Search and Pageflakes and for a NZ example EcoBob although I am sure there are others.


What does shipping mean in this Internet age?


Well it means it is ready for prime time, run it in a production environment for free (whether it is backended by .net or not) and move the support issues onto Microsoft if the framework is not acting the way it should.


I see on the ASP.NET AJAX forums we have more than a quarter of a million users (some working full time for Microsoft answering community questions) generating almost 1.5 million posts on the topic.


Enjoy!

Decision Tree Editor

In previous posts I have mentioned the usage of Decision Trees or Decision Tables to represent business rules.

Acumen Business has developed an editor to create such Decision Tree rules. See the video here. The decision tree can be viewed in horizontal or vertical layout.

In order to effectively use such a format on rule execution; the runtime inference engine must support this kind of rule directly. Unfortunately BizTalk does not support this out-of-the-box. CA’s RuleSp (or the new Aion) does support Decisions Tree natively in their inference engine. Corticon’s rule sheets are also very similar to this Decision Tree format. Although it seems that it models a rule sheet like a decision table, the fact that certain branches can be overriden makes it more a decision tree. I’m pretty sure that Blaze and Ilog have something similar as well.

ASP.NET AJAX and SharePoint 2007: SharePoint AJAX Toolkit

ASP.NET AJAX has just RTM-ed, cool! Even cooler: Daniel Larson has released the SharePoint AJAX Toolkit on CodePlex, which uses the ASP.NET AJAX framework. This sounds very promising!

Daniel writes: ASP.NET Ajax Extensions (aka Atlas) have been released (finally!), and I’ve been saving up some code for the release which I’ll post shortly. (Get eh 1.0 RTM bits here: ASP.NET 2.0 AJAX Extensions 1.0)The SharePoint Ajax Toolkit is also ready for release and is available as a WSP (SharePoint Solution Package) here with some nifty new features, including a Solution Package based installer that allows FULL no-touch deployment and registers the Atlas httpHandlers, as well as a Refresh interval programmed into the XmlWebPart (a great solution for SharePoint list RSS feeds). Included is one web part, the Xml Web Part (with a default RSS reader XSLT which can be set to auto refresh), and the core framework for AJAX developers. The source code is recommended for SharePoint developers.

Mmm, I guess my colleague Kevin (hey Kevin, when do you start a blog?), who is going to teach the first U2U ASP.NET AJAX training in two weeks, will have to give me an AJAX crash-course! 🙂

Technorati tags: asp.net, sharepoint, wss, moss, ajax

5 Things you don’t know about me… I’ve been tagged.

Ok, Ok, I better get in on the action as well. Seems like the rest of the world has been tagged so here is my contribution to the 5 things you may not know about me… thanks Mick Badran and Graham Elliott for the pleasure 😉 So in no particular order:

1. In my late teens / early 20’s I played guitar in a band called the FIGURES that supported Dennis Walter and Karen Knowles (local Australian Celebrity’s)! Hmmm… doing the RSL circuit at that time in my life was ummm… inspiring?? I am also a U2 music lover and used to be able to play every single one of their songs on guitar off the top of my head!

2. I have been playing competitive pool (billiards) since I was 18 years old (for 16 years now) but am likely to give it a break for a while now. Had my run 😉

3. I was an uncle at 9 years old! I have two older brothers… one of them (Lou) is 18 years older than me and he and my sister-in-law had their first child when I was only nine! (I now have eight nephews / nieces!)

4. Although I was born and bred in Australia, Vidotto is of Italian heritage (mum and dad were born in Italy)and I speak somewhat fluent Italian 😉 Another tidbit – Interestingly as well, I found our later in life that my dad actually married my mum via proxy! Mum and Dad met in Italy, then Dad came to Australia for a better life and wanted to bring mum over of course (they were not married at that stage) – so they held a wedding via proxy (mum in Italy and Dad in Australia) where they had a ceremony and all (but my dad’s brother stepped in for the wedding!) – That’s where the conversation stops – no lude remarks please!

5. Some of my most memorable moments in life so far – spending time with my mum as a kid (she passed away when I was 10), birth of my beautiful kids, my wedding day and wife Jeynelle, making wine and tomato salsa with my dad, winning sporting grandfinals (I love playing team sports!)

 

Anyway, your next! Enjoy.

Sql Adapter plays tricks – multipart return messages, BTS 2006

While working on a BTS 2006 solution – I decided to use the SQL Adapter to call a
stored Proc to update data.

While the SQL Adapter wizard is OK, there’s no real reason to use it. I
usually delete everything it creates, apart from the Schema for namespace samples.
The Namespaces you specify through the wizard is there mainly for the SQL Adapter
to figure out where the bits are for it to process, and where return results should
be inserted into……

In alot of solutions I build, I usually have a single generic SQL Update Orchestration,
not an Orch, Schema + Port for each type of SQL action required.

The trick to all this is how the SQL Adapter handles the messages sent to
it.
More details is found in the SQLXML documentation.

The paper back version:

Let’s say I have two tables and a Stored Proc that I want to use within the SAME DB
(if I want to talk to different DB’s then we’d need to create a separate message for
the different DB’s to update due to the fact that the physical SQL Port (whether it
be ‘dynamic’ or physical) e.g. SQL://ServerName/DB…….

Table A: PacMan Players
Fields –
Name, email

Table B: PacMan Scores

Fields – email, score

Stored Proc: UpdateScores
Params:
email, score, gametime

If these three were in the same DB here’s the message(s) that you’d need to send to
the SQL Adapter (could even be via CBR and not ALWAYS an Orch).

e.g. a sample message for stored procs.
<sqlRequest xmlns=’http://micksdemos.sql’>
     <Updates>
            <UpdateScores email=’jackiechan@j.com’ score=’54’
gametime=’1200′ />
           
<AnotherStoredProc p1=’2′ p2=’aaa’ p3=’….’ />
      </Updates>
      <Results>
                    
<!– **** Set to be ANY element here, with ‘skip’ processing set via the schema
**** –>
      </Results>
</sqlResults>

e.g. a sample message for tables (further details on this message
structure can be obtained from SQLXML Documents)
<sqlRequest xmlns=’http://micksdemos.sql’>   

      <sync>
             <after>
                 
<PacManScores email=’jackiechan@j.com’ score=’22000′
/>
                 
<PacManPlayers Name=’mick’ email=’mick@b.com’  />
                 

            
</after>
      </sync>
</sqlResults>

Now the interesting thing upon the results being returned for the called Stored
Procs
We sent down batches of 400 updates to be performed via the stored proc method,
and the results were supprising!!!!

We got a message back via one of the several Two-Way SQL Ports defined (each
talking to a different database, being activated via CBR)

The return results was a Multi-part message with 400 parts!!!!!! In
this case I was waiting for the return message within an Orchestration and then carrying
on (mainly for BAM purposes to capture timings, average call times etc)

Do you know how hard it was to find an appropriate message type?????? If I made a
multi-part message type with 5 parts it’s not 400. If I made one with 400 parts (each
part was a type of ANY) then I’m sure we’d have a batch in the future with 401 updates…boom!
blows up.

So my challenge was to find the appropriate message type for this return message…..needless
to say “I’m still looking”
I tried

(1) XLANGMessage – not serializable and bts wont compile in the IDE. This is the most
logical cause then I could just go through the parts grabbing each result message.
(2) XLANGPart – long shot, individual part of a message, but also if a Message if
declared as ANY type then this is the .NET Message Type that represents it behind
the scenes.
(3) ANY – Compiled and run, error when the results message is returned, as the ANY
type is still dealing with a single part message
(4) XMLDocument – yeah right! Sort of the one that you cover your eyes, run the test
and peep through your fingers looking at the screen to see if it worked….or more
like *hoped’ it worked 🙂

Solution: Create a simple Custom Pipeline Component to Consolidate the Return
parts


The Orchestration is fine to go on continuing processing.
The thing that stumped me is that I send in a Batch within a Single XML Document,
why dont I get that as a response??


I could imagine when sending a single update this problem never occurs.
(and it hasnt in the past)

Here’s the custom pipeline component – this one’s in VB.NET as per the client’s
coding standards on this.
(I use the VirtualStream found in the SDK)
– this is not production ready
code. Further stress testing needed.

Here’s a snippet showing the execute method (BTSHelper.VirtualStream – is the VirtualStream
class from the BTS 2006 SDK)

#Region “IComponent Members”
Public Function Execute(ByVal pContext As IPipelineContext, ByVal pInMsg As IBaseMessage)
As _
IBaseMessage Implements IComponent.Execute

Try
                  
Dim msgReturn As IBaseMessage = InternalMyExecute(pContext, pInMsg)
                  
Return (msgReturn)
Catch ex As Exception
                  
Throw ex
End Try         

End Function

Private Function InternalMyExecute(ByVal pc As IPipelineContext, ByVal inMsg
As IBaseMessage) As IBaseMessage
         Dim outMsg As IBaseMessage
= Nothing
         Dim outPt As IBaseMessagePart = Nothing
         Dim outStream As BTSHelper.VirtualStream
= Nothing
         Dim sw As StreamWriter = Nothing
         Try
              
If (inMsg.PartCount > 1) Then ‘combine all the parts into one – painful return
results from SQL.
                         
outMsg = pc.GetMessageFactory().CreateMessage()
                         
outMsg.Context = inMsg.Context
                         
outPt = pc.GetMessageFactory().CreateMessagePart()
                         
outStream = New BTSHelper.VirtualStream()
                         
sw = New StreamWriter(outStream)
                         
sw.Write(“<{0}>”, _documentRootElement)
                         
For i As Integer = 0 To inMsg.PartCount – 1
                                       
Dim sptName As String = String.Empty
                                       
Dim s As String = GetMessagePartAsString(inMsg.GetPartByIndex(i, sptName))
                                       
sw.Write(s)
                          Next
                         
sw.Write(“</{0}>”, _documentRootElement)
                         
sw.Flush()
                         
‘ we DONT want to close the stream i.e. sw.close()
                         
outStream.Seek(0, SeekOrigin.Begin)
                         
outPt.Data = outStream
                          outMsg.AddPart(“Body”,
outPt, True)
                          Return
(outMsg)
                 
Else ‘single part
                        
Return (inMsg)
                 
End If
          Catch ex As Exception
                  inMsg.SetErrorInfo(ex)
‘ the inMessage is the one that gets reported on in BizTalk within the pipeline
                  EventLog.WriteEntry(_EVENTLOG_SOURCE,
“SQL Combiner Exception Internal Execute- ”          

                         
+ ControlChars.CrLf + ControlChars.CrLf + ex.Message, EventLogEntryType.Error)
                 
Throw ex
          Finally

          End Try
End Function

Private Function GetMessagePartAsString(ByVal pt As IBaseMessagePart) As String
                
Dim xdoc As XmlDocument = Nothing
           Try
                      
xdoc.Load(pt.GetOriginalDataStream())
                      
Return (xdoc.DocumentElement.OuterXml)
           Catch ex As Exception
                      
Throw ex
           Finally
                      
xdoc = Nothing
                      
GC.Collect()
           End Try
End Function

Public Sub CopyStream(ByVal src As Stream, ByVal dst As Stream)
            Try
                 
If (src.CanSeek) Then
                           
src.Seek(0, SeekOrigin.Begin)
                 
End If
                 
Dim DATA_BLOCK As Integer = 4096
                 
Dim bytesRead As Integer = 0
                 
Dim buff(DATA_BLOCK – 1) As Byte

                 
bytesRead = src.Read(buff, 0, DATA_BLOCK)
                 
While (bytesRead > 0)
                          
dst.Write(buff, 0, bytesRead)
                          
bytesRead = src.Read(buff, 0, DATA_BLOCK)
                 
End While
            Catch ex As Exception
                 
Throw ex
            End Try
End Sub

Private Sub CopyMessageParts(ByVal sourceMessage As IBaseMessage, ByVal destinationMessage
As IBaseMessage, ByVal newBodyPart As IBaseMessagePart)

                
Dim bodyPartName As String = sourceMessage.BodyPartName

                
For i As Integer = 0 To sourceMessage.PartCount – 1
                             
Dim partName As String = Nothing
                             
Dim messagePart As IBaseMessagePart = sourceMessage.GetPartByIndex(i, partName)
                             
If (partName <> bodyPartName) Then
                                           
destinationMessage.AddPart(partName, messagePart, False)
                              Else
                                            destinationMessage.AddPart(bodyPartName,
newBodyPart, True)
                             
End If
                
Next
End Sub

#End Region

Grab the code from below – This sample is aimed to be something to look and discover
from rather than be a ‘ready made installable package’

SqlCombiner.vb
(9.63 KB)

Brisbane BizTalk UG (Wed 7th Feb 2007) – WCF Adapters and R2

Hey all, I’m back from leave and ready to rock for 2007! The BrizTalk guys have posted thier synopsis for thier next session which should be a GEM!!!  Here is the email. If you can’t get to the session (becuase you don’t live in Bris Vegas!) email the guys for the preso.

 

WCF Adapters and R2

Wednesday,  07 February 2007 5:30 PM

Microsoft, Level 9, Waterfront Place, 1 Eagle Street, Brisbane

Happy New Year!! For our first meeting of 2007, local BizTalk guru Mark Daunt will enlighten us about the new WCF adapters that ship with R2, including:

  • WsHttp Adapter – provides the WS-* standards support over HTTP transport.
  • NetTcp Adapter – provides the WS-* standards support over TCP transport. 
  • WCF-NetMsmq Adapter – provides queued messaging using MSMQ transport. 

Mark will attempt to demo the BizTalk R2 WCF Adapters with some or all of the following cases:

  • Exposing BizTalk orchestration as a WCF web service
  • Exposing BizTalk Content Based Routing application as a WCF web service
  • Consuming a WCF service from BizTalk orchestration
  • Consuming a WCF service from Content Based Routing application

If time permits, Daniel Toomey and Tim Goodsell will give a project update on the use of BizTalk Server 2006 as a data migration tool for the ICMS project at Child Safety.

Who Should Attend?

Solution Architects, IT Managers, Developers.

About the Presenter

Mark Daunt is software developer with close to 15 years experience.   Currently his primary focus is on Microsoft technologies such as .NET, BizTalk and SharePoint.  Mark is also a Microsoft Certified Trainer.

Mark’s consulting company, Data Cogs Information Technology (http://www.datacogs.com/datablogs/), has clients in many industries such as local government, mining and finance.  The company also works closely with Microsoft, doing consulting and working at training events, such as Tech Ed (US and Australia) and the Partner Readiness program.

Tentative Schedule

Here’s the game plan (presentation times are approximate):

5:30 PM            Meet & Greet (free pizza & drinks!)

6:00 PM            Introduction and Welcome (Daniel Toomey, BrizTalk Coordinator)

6:05 PM            WCF Adapters (Mark Daunt, Data Cogs)

7:00 PM            ICMS Project Update (Daniel Toomey & Tim Goodsell)

Remember to arrive before 6:00pm or the lifts will be locked!

Please be sure that you RSVP so we know how many to expect. You can use the voting buttons in this message if you have Outlook, otherwise just reply with a yea or nay.

Looking forward to seeing you there!