by community-syndication | Jan 23, 2007 | BizTalk Community Blogs via Syndication
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.
- 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”.
- 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.
- 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.
- 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.
- 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.
by community-syndication | Jan 23, 2007 | BizTalk Community Blogs via Syndication
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!
by community-syndication | Jan 23, 2007 | BizTalk Community Blogs via Syndication
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.
by community-syndication | Jan 23, 2007 | BizTalk Community Blogs via Syndication
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
by community-syndication | Jan 23, 2007 | BizTalk Community Blogs via Syndication
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.
by community-syndication | Jan 23, 2007 | BizTalk Community Blogs via Syndication
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)
by community-syndication | Jan 23, 2007 | BizTalk Community Blogs via Syndication
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!