<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.objectsharp.com/cs/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Matt Meleski's .Net Blog - The ABC's of .NET</title><subtitle type="html">ASP.NET/ADO.NET/Biztalk 2004/C#</subtitle><id>http://www.objectsharp.com/cs/blogs/matt/atom.aspx</id><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/default.aspx" /><link rel="self" type="application/atom+xml" href="http://www.objectsharp.com/cs/blogs/matt/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61129.2">Community Server</generator><updated>2006-11-01T21:51:00Z</updated><entry><title>Robust Error Handling for BizTalk Solutions Presentation</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/11/07/robust-error-handling-for-biztalk-solutions-presentation.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/11/07/robust-error-handling-for-biztalk-solutions-presentation.aspx</id><published>2007-11-07T02:01:00Z</published><updated>2007-11-07T02:01:00Z</updated><content type="html">&lt;P&gt;I presented at the Microsoft SOA and Business Process Conference last week in Redmond. The title of the presentation was:&lt;/P&gt;
&lt;P&gt;Robust Error Handling for BizTalk Solutions.&lt;/P&gt;
&lt;P&gt;I did the presentation once on Thurs Nov 1 and again on Friday Nov 2. A number of people who attended the &lt;BR&gt;presentation were asking for the demo code and powerpoint. The zipped code is &lt;A class="" href="http://objectsharp.com/cs/files/folders/95980/download.aspx"&gt;&lt;STRONG&gt;here&lt;/STRONG&gt;&lt;/A&gt; and the powerpoint from the presentation is &lt;A class="" href="http://objectsharp.com/cs/files/folders/95981/download.aspx"&gt;&lt;STRONG&gt;here&lt;/STRONG&gt;&lt;/A&gt;. Hopefully when I have more time, I will try to write a more formal blog entry describing some of the techniques for error handling in BizTalk. Also for anybody who attended the conference and missed my presentation, you can catch the recorded presentation on a post conference DVD, that should be mailed out to all attendees in the next month or so.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=95982" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="Newsletter" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/Newsletter/default.aspx" /><category term="BizTalk" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/BizTalk/default.aspx" /></entry><entry><title>BizTalk -&gt; Custom Pipeline Component for Processing DBF, Excel and other ODBC types</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/06/15/test.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/06/15/test.aspx</id><published>2007-06-15T13:27:00Z</published><updated>2007-06-15T13:27:00Z</updated><content type="html">&lt;P&gt;I deleted the original post by mistake (woops!), so below is to replace the deleted one.&lt;BR&gt;&lt;BR&gt;Last year a customer had a requirement to process DBF files in BizTalk. I created a custom pipeline component that saved the incoming binary stream to a physical file on the BizTalk machine and then used basic ADO.NET to&amp;nbsp;parse the DBF File into an XML document. I then modified/extended this pipeline component to accept and parse other ODBC files to XML, such as:&lt;/P&gt;
&lt;P&gt;DBF&lt;BR&gt;Excel&lt;BR&gt;FoxPro&lt;BR&gt;Possibly others such as Access Files.&lt;/P&gt;
&lt;P&gt;At this point in time, this custom pipeline component will only parse Excel and DBF files, but it is possible to modify the component to process other ODBC types.&lt;/P&gt;
&lt;P&gt;By using this custom pipeline component in a BizTalk Receive Pipeline it will do the following:&lt;/P&gt;
&lt;P&gt;Raw DBF, Excel messages are delivered to BizTalk by any transport such as:&lt;BR&gt;File&lt;BR&gt;FTP&lt;BR&gt;MSMQ&lt;BR&gt;etc. etc.&lt;/P&gt;
&lt;P&gt;The raw message will be parsed to XML in a BizTalk Receive Pipeline with the parsed XML message published into the MsgBox.&lt;/P&gt;
&lt;P&gt;This component requires no special APIs and uses basic ADO.NET code to parse the ODBC type files into XML.&lt;/P&gt;
&lt;P&gt;You can download the full source code for the Custom Pipeline component at the end of this entry.&lt;/P&gt;
&lt;P&gt;The component works as below:&lt;/P&gt;
&lt;P&gt;1) The incoming file is saved to a temporary file on the BizTalk machine.&lt;BR&gt;2) An OLEDB connection will be used to connect to the file from 1).&lt;BR&gt;3) A Sql query is performed against the OLEDB datasource.&lt;BR&gt;4) The results from the query are stored to an ADO.NET dataset/datatable.&lt;BR&gt;5) The XML is extracted from the datatable and modified for a root node name and target namespace.&lt;BR&gt;6) The temporary file from 1) is deleted&lt;BR&gt;7) The XML from 5) is added back to the pipeline message stream.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;The custom pipeline component was coded as a Decoder pipeline component, but it could be modified to implement a Disassembler pipeline component.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.objectsharp.com/blogs/matt/images/ODBCPipelineComponentInPipeline.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The Custom Pipeline Component exposes a number of properties for dynamic configuration.&lt;/P&gt;
&lt;P&gt;The connection string and query differs slightly for an Excel and DBF file. Therefore the configuration for an Excel file and DBF file are discussed separately:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Excel&lt;BR&gt;&lt;/U&gt;&lt;BR&gt;&lt;/STRONG&gt;The incoming Excel file to be parsed looks as below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.objectsharp.com/blogs/matt/images/ODBCPipelineComponentExcel.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The resultant parsed XML file will look as below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.objectsharp.com/blogs/matt/images/ODBCPipelineComponentExcelXML.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Note: Only two Employee nodes are present in the XML file due to a filter condition in the configuration (see below).&lt;/P&gt;
&lt;P&gt;The Configuration for this Pipeline is as below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.objectsharp.com/blogs/matt/images/ODBCPipelineComponentExcelProperties.jpg"&gt;&lt;/P&gt;
&lt;P&gt;1) ConnectionString -&amp;gt; The OLEDB Connection string for the Excel file.&lt;BR&gt;The following is set for the ConnectionString property:&lt;BR&gt;&lt;EM&gt;Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;&lt;BR&gt;&lt;/EM&gt;But, the final Connection String that is produced by the code looks like below: &lt;BR&gt;&lt;EM&gt;Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=C:\Temp\afgd1234.xls&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;This is because the code, dumps the Excel File to the TempDropFolderLocation and must dynamically add the Data Source section to the connection string.&lt;/P&gt;
&lt;P&gt;Note : Other Connection Properties for an Excel File:&lt;/P&gt;
&lt;P&gt;"HDR=Yes;" indicates that the first row contains columnnames, not data&lt;BR&gt;"IMEX=1;" tells the driver to always read "intermixed" data columns as text&lt;BR&gt;(Above From: &lt;A href="http://www.connectionstrings.com/"&gt;http://www.connectionstrings.com/&lt;/A&gt; )&lt;/P&gt;
&lt;P&gt;2) DataNodeName -&amp;gt; The XML Node name for the Data. In this case Employee &lt;/P&gt;
&lt;P&gt;3) DeleteTempMessages -&amp;gt; If set to True, will delete the Excel file that is dropped to the TempDropFolderLocation after processing.&lt;/P&gt;
&lt;P&gt;4) Filter -&amp;gt; Filter for the SqlStatement. In this case, will only Select LastNames Like %B% &lt;BR&gt;Note: This is optional. If all data is to be returned, leave blank.&lt;/P&gt;
&lt;P&gt;5) Namespace -&amp;gt; NameSpace for the resultant XML message. &lt;/P&gt;
&lt;P&gt;6) RootNodeName -&amp;gt; Root Node Name for the resultant XML Message.&lt;/P&gt;
&lt;P&gt;7) SqlStatement -&amp;gt; OLEDB Select Statement.&lt;BR&gt;SQL syntax: SELECT * FROM [sheet1$] - i.e. worksheet name followed by a "$" and wrapped in "[" "]" brackets.&lt;BR&gt;(Above From: &lt;A href="http://www.connectionstrings.com/"&gt;http://www.connectionstrings.com/&lt;/A&gt; )&lt;/P&gt;
&lt;P&gt;Note: The SqlStatement could also look as below:&lt;BR&gt;Select FirstName,LastName FROM [sheet1$]&amp;nbsp; (only bring back selected columns)&lt;BR&gt;Select FirstName as FName, LastName as LName FROM [sheet1$] (rename the column Names in the resultant XML)&lt;/P&gt;
&lt;P&gt;8) TypeToProcess -&amp;gt; In this case Excel File.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;DBF&lt;/U&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;The incoming DBF file to be parsed looks as below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.objectsharp.com/blogs/matt/images/ODBCPipelineComponentDBF.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The resultant parsed XML file will look as below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.objectsharp.com/blogs/matt/images/ODBCPipelineComponentDBFXML.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Note: Only two Items nodes are present in the XML file due to a filter condition in the configuration (see below).&lt;/P&gt;
&lt;P&gt;The Configuration for this Pipeline is as below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.objectsharp.com/blogs/matt/images/ODBCPipelineComponentDBFProperties.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Note: The above is an example of Per Instance Pipeline Configuration for BizTalk 2006.&lt;BR&gt;&lt;BR&gt;1) ConnectionString -&amp;gt; The OLEDB Connection string for the DBF file.&lt;BR&gt;The following is set for the ConnectionString property:&lt;BR&gt;&lt;EM&gt;Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;&lt;BR&gt;&lt;/EM&gt;But, the final Connection String that is produced by the code looks like below: &lt;BR&gt;&lt;EM&gt;Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;Data Source=C:\Temp\&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;This is because the code, dumps the DBF File to the TempDropFolderLocation and must dynamically add the Data Source section to the connection string.&lt;/P&gt;
&lt;P&gt;2) DataNodeName -&amp;gt; The XML Node name for the Data. In this case Items&lt;/P&gt;
&lt;P&gt;3) DeleteTempMessages -&amp;gt; If set to True, will delete the DBF file that is dropped to the TempDropFolderLocation after processing.&lt;/P&gt;
&lt;P&gt;4) Filter -&amp;gt; Filter for the SqlStatement. In this case, will only Select PRICE &amp;gt;= 200 and PRICE &amp;lt;=500 &lt;BR&gt;Note: This is optional. If all data is to be returned, leave blank.&lt;/P&gt;
&lt;P&gt;5) Namespace -&amp;gt; NameSpace for the resultant XML message. &lt;/P&gt;
&lt;P&gt;6) RootNodeName -&amp;gt; Root Node Name for the resultant XML Message.&lt;/P&gt;
&lt;P&gt;7) SqlStatement -&amp;gt; OLEDB Select Statement.&lt;/P&gt;
&lt;P&gt;In this case only have the columns part of the Select Statement as below:&lt;BR&gt;Select *&amp;nbsp; &lt;/P&gt;
&lt;P&gt;This is because the code dumps the DBF File to the TempDropFolderLocation and must dynamically add the FROM statement as below:&lt;BR&gt;SELECT * FROM i0lb1gcr.dbf&lt;BR&gt;&amp;nbsp;&lt;BR&gt;Note: The SqlStatement could also look as below:&lt;BR&gt;Select COD, PRICE (only bring back selected columns)&lt;BR&gt;Select COD as Id, Price as Amount (rename the Node Names in the resultant XML)&lt;/P&gt;
&lt;P&gt;8) TypeToProcess -&amp;gt; In this case DBF File.&lt;BR&gt;Note: When configuring a Pipeline Component in the BizTalk Server 2006 Administration console, &lt;BR&gt;for TypeToProcess :&lt;BR&gt;0 -&amp;gt; Excel&lt;BR&gt;1 -&amp;gt; DBF&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;You can download the code &lt;A href="http://www.objectsharp.com/blogs/matt/images/ODBCCustomPipe.zip"&gt;&lt;STRONG&gt;Here&lt;/STRONG&gt;&lt;/A&gt;. Before installing, look at the &lt;A href="http://www.objectsharp.com/blogs/matt/images/ODBCCustomReadMe.txt"&gt;&lt;STRONG&gt;Readme&lt;BR&gt;&lt;/STRONG&gt;&lt;/A&gt;Note: This code was written in VS2005. If you want to use it in VS2003, create a new Pipeline type of project in VS2003 and then just copy the code from the DecodeODBC.cs to the VS2003 class. Also thoroughly test the code before using.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Finally:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;The not so good things about this Component are:&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;1) It has to write the ODBC file locally to disk before parsing. This will create &lt;BR&gt;extra disk I/O. I did test it with multiple submissions of 1 MB DBF files. The performance still seemed &lt;BR&gt;pretty good.&lt;/P&gt;
&lt;P&gt;2) The types of Excel files it can process are flat. If you're Excel files to process are &lt;BR&gt;complex, not sure how well this Component will parse to XML. &lt;/P&gt;
&lt;P&gt;&lt;U&gt;The good things about this component are:&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;1) The code to parse the ODBC files is dead simple, looks something like the below:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;OleDbDataAdapter oCmd;&lt;BR&gt;&amp;nbsp;// Get the filter if there is one&lt;BR&gt;&amp;nbsp;string whereClause = " ";&lt;BR&gt;&amp;nbsp;if (Filter.Trim() != " ")&lt;BR&gt;&amp;nbsp;&amp;nbsp; whereClause = " Where " + Filter.Trim();&lt;BR&gt;&amp;nbsp;if (this.TypeToProcess == odbcType.Excel)&lt;BR&gt;&amp;nbsp;&amp;nbsp; oCmd = new OleDbDataAdapter(this.SqlStatement.Trim() + whereClause, oConn);&lt;BR&gt;&amp;nbsp;else // dbf&lt;BR&gt;&amp;nbsp;&amp;nbsp; oCmd = new OleDbDataAdapter(this.SqlStatement.Trim() + " From " + filename + whereClause, oConn);&lt;BR&gt;&amp;nbsp;oConn.Open();&lt;BR&gt;&amp;nbsp;// Perform the Select statement from above into a dataset, into a DataSet. &lt;BR&gt;&amp;nbsp;DataSet odbcDataSet = new DataSet();&lt;BR&gt;&amp;nbsp;oCmd.Fill(odbcDataSet, this.DataNodeName);&lt;BR&gt;&amp;nbsp;oConn.Close();&lt;BR&gt;&amp;nbsp;// Write the XML From this DataSet into a String Builder&lt;BR&gt;&amp;nbsp;System.Text.StringBuilder stringBuilder = new StringBuilder();&lt;BR&gt;&amp;nbsp;System.IO.StringWriter stringWriter = new System.IO.StringWriter(stringBuilder);&lt;BR&gt;&amp;nbsp;odbcDataSet.Tables[0].WriteXml(stringWriter);&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;2) This code can be modified to process other types of ODBC files. The modifications &lt;BR&gt;may be minor.&lt;/P&gt;
&lt;P&gt;3) You can filter the data in an incoming Excel or DBF file.&lt;/P&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=59889" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="Newsletter" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/Newsletter/default.aspx" /><category term="BizTalk" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/BizTalk/default.aspx" /></entry><entry><title>BizTalk R2 RFID and working with a real Reader Device (Phidget)</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/06/09/biztalk-r2-rfid-and-working-with-a-real-reader-device-phidget.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/06/09/biztalk-r2-rfid-and-working-with-a-real-reader-device-phidget.aspx</id><published>2007-06-09T19:07:00Z</published><updated>2007-06-09T19:07:00Z</updated><content type="html">&lt;P&gt;This entry discusses using a real RFID reader (Phidget) with BizTalk 2006 R2 RFID Beta 2. There are a couple of RFID samples provided with the RFID install, but they involve simulators for RFID devices. If you want to try a real RFID reader sample with BizTalk 2006 R2 RFID, read below.&lt;BR&gt;&lt;BR&gt;Jim Bowyer, a Senior Technical Specialist for Microsoft based in Calgary, sent out a short note about an inexpensive&amp;nbsp;RFID reader that has a community DSPI (Device Service Provider Interface)&amp;nbsp; for BizTalk R2 RFID. &lt;BR&gt;&lt;BR&gt;So I ordered the RFID reader, downloaded the DSPI and then tried against my BizTalk 2006 R2 RFID Beta 2 installation.&lt;/P&gt;
&lt;P&gt;If you want to try yourself, perform the following steps:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1) If not already done so, register for public&lt;/STRONG&gt; &lt;A class="" href="http://support.microsoft.com/?kbid=936046"&gt;&lt;STRONG&gt;BizTalk 2006 R2 Beta&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;2, &lt;STRONG&gt;then download.&lt;/STRONG&gt;&lt;BR&gt;Follow the instructions to install BizTalk RFID.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2) Order the&lt;/STRONG&gt; &lt;A class="" href="http://www.trossenrobotics.com/store/p/3606-PhidgetsRFID-Reader-Only-USB-.aspx"&gt;&lt;STRONG&gt;PhidgetsRFID Reader (USB)&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I opted to order the &lt;A class="" href="http://www.trossenrobotics.com/store/p/3604-RFID-Kit.aspx"&gt;&lt;STRONG&gt;Phidget RFID Kit&lt;/STRONG&gt;&lt;/A&gt;, that includes a set of read only tags. &lt;/P&gt;
&lt;P&gt;I live in Toronto, Canada, so the total cost for the RFID kit was:&lt;/P&gt;
&lt;P&gt;$79.99 (US)&amp;nbsp; Kit&lt;BR&gt;$49.74 (US)&amp;nbsp; Shipping&lt;BR&gt;$11.98 (CAN) Customs Fees&lt;BR&gt;-------------------&lt;BR&gt;$141.71&lt;/P&gt;
&lt;P&gt;If you live in the States, you will probably get a cheaper total cost, for reduced shipping fees and no customs charges. I ordered the kit online on Friday, and received it the next Tuesday. So approximately 2 Business days for delivery. &lt;BR&gt;&amp;nbsp;&lt;BR&gt;Below is the image of what you get in the kit:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56808/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;The left hand side of the picture contains the various RFID tags, and the right side is the actual RFID reader. A USB cable is also included, so you can connect the RFID reader to a free USB port on your computer.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3) Connect the Phidget RFID reader to your computer via the USB cable.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;My host machine is Windows XP. The Phidget device was picked up immediately. No extra drivers etc. were needed.&lt;/P&gt;
&lt;P&gt;As below, I have BizTalk 2006 R2 Beta 2 and BizTalk RFID installed on a Windows 2003 VMWare image.&lt;BR&gt;So as below, the extra step in this case was to configure the VMWare image to pick up the Phidgets USB device.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56807/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4) Download and install the Phidget DSPI from Irving De la Cruz's Blog&lt;/STRONG&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/irvingd/pages/biztalk-rfid-device-provider-dspi-for-phidget-devices.aspx"&gt;http://blogs.msdn.com/irvingd/pages/biztalk-rfid-device-provider-dspi-for-phidget-devices.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The instructions provided with the download are top notch and I had it up and running within a few minutes. To install the DSPI, Irving provides a script file &lt;BR&gt;or a well documented manual process using the RFID Manager console. I used the manual process to install and had only a couple of minor problems as described below: &lt;/P&gt;
&lt;P&gt;After installing the Phidget Device provider, it would not start (received RFID Manager Error). See below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56805/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;During the configuration of Phidget Device provider, an IIS virtual directory hosting a number of&amp;nbsp; WCF services is created as below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56804/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;As below, when trying to browse to one of the services &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56803/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;A&amp;nbsp;Service Unavailable error was reported (see below)&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56802/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;To fix:&lt;/P&gt;
&lt;P&gt;On my Windows 2003 Server, WSS (Sharepoint) Services 2.0 was also&amp;nbsp;present (from a previous install) along with RFID.&lt;BR&gt;Therefore as below, I excluded the PhidgetProvider&amp;nbsp;URL from the WSS managed paths.&lt;BR&gt;Also for the PhidgetProvider Virtual Directory, I changed the Application Pool to one that runs under an Administrator account (just to get it to work). Once this was done, the PhidgetProvider would start in the RFID Manager.&lt;BR&gt;To recap, if you are having problems starting the Phidget Provider, ensure that you can successfully browse without error to one of the &lt;BR&gt;.svc services, before trying to start the Phidget Provider.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56801/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Another problem I had similar to the one above:&lt;BR&gt;After configuring the Sql Sink Process to capture the RFID reads (using the BizTalk RFID Manager), the process would not start.&lt;BR&gt;As below, another IIS virtual directory is created hosting a number of&amp;nbsp;WCF services. As explained above with the PhidgetProvider service, errors were reported when trying to &lt;BR&gt;browse to one of the TestProcess .svc services. Therefore as above with the PhidgetProvider URL, I excluded the TestProcess&amp;nbsp;URL from the WSS managed paths&lt;BR&gt;and fiddled with the permissions of the App Pool that the service was running under. When I could successfully browse to one of the .svc TestProcess &lt;BR&gt;services, the TestProcess successfully started in RFID manager.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56800/download.aspx"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5) Test&lt;BR&gt;&lt;BR&gt;&lt;/STRONG&gt;After following the instructions in Irving's documentation, and the Phidget Device Provider, Phidget Device and Process to capture the reads are all enabled and have started successfully without errors (use the BizTalk RFID manager to check):&lt;BR&gt;As below to test, place one of the tags within a few inches of the reader.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56806/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Then as below to see if it worked, using the RFID manager you can view the read tags with the View Tags dialog.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/56799/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;As above in the dialog, each tag has a unique Tag Id associated.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Final thoughts:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- Easy to set up. &lt;BR&gt;- The RFID reader is inexpensive, shipping costs may be expensive though, depending on where you live.&lt;BR&gt;- So far has been stable.&lt;BR&gt;- A great way to prototype/experiment with BizTalk RFID and a real RFID device.&lt;/P&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=56809" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="Newsletter" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/Newsletter/default.aspx" /><category term="BizTalk" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/BizTalk/default.aspx" /></entry><entry><title>SqlBulkInsert Adapter for VS2003 and BizTalk 2004</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/04/19/sqlbulkinsert-adapter-for-vs2003-and-biztalk-2004.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/04/19/sqlbulkinsert-adapter-for-vs2003-and-biztalk-2004.aspx</id><published>2007-04-19T01:13:00Z</published><updated>2007-04-19T01:13:00Z</updated><content type="html">&lt;P&gt;A few people have asked for the BizTalk 2004 version of this &lt;A class="" href="http://objectsharp.com/cs/blogs/matt/archive/2005/10/23/3525.aspx"&gt;&lt;STRONG&gt;BizTalk SqlBulkInsert 2006 Adapter&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Follow the&amp;nbsp;below instructions to install on BizTalk 2004:&lt;/P&gt;
&lt;P&gt;1) Download the zip file at the end of this blog entry.&lt;BR&gt;2) When unzipping, unzip it a different folder such as: C:\temp&amp;nbsp; &lt;BR&gt;3) Copy the unzipped contents -&amp;gt; C:\Temp\BTSBulkLoad\SqlBulkInsertAdapter directory&lt;BR&gt;to the C:\BTSBulkLoad\ directory that was created by the BizTalk 2006 zip file that you can find &lt;A class="" href="http://objectsharp.com/cs/blogs/matt/archive/2005/10/23/3525.aspx"&gt;&lt;STRONG&gt;here&lt;/STRONG&gt;&lt;/A&gt;:&lt;BR&gt;(Look at the bottom of the above referenced blog entry for the download and Readme instructions).&lt;BR&gt;Just replace the&amp;nbsp; VS2005 C:\BTSBulkLoad\SqlBulkInsertAdapter folder contents with the VS2003 SqlBulkInsertAdapter directory contents.&lt;BR&gt;4) Follow the below installation &lt;A class="" href="http://objectsharp.com/cs/blogs/matt/images/BTSBulkLoadReadme.txt"&gt;&lt;STRONG&gt;instructions&lt;/STRONG&gt;&lt;/A&gt; for the BizTalk 2006 adapter to install the BTS 2004 adapter&lt;BR&gt;&amp;nbsp;&lt;BR&gt;Remember that this is just a prototype, so you will have to fix the code to get it to work properly. Peter (see comments from this blog &lt;A class="" href="http://objectsharp.com/cs/blogs/matt/archive/2005/10/23/3525.aspx"&gt;&lt;STRONG&gt;entry&lt;/STRONG&gt;&lt;/A&gt;) has stated that he has a BizTalk 2004 version of the adapter working.&lt;BR&gt;Download the BizTalk 2004 adapter (Zip file) &lt;A class="" href="http://objectsharp.com/cs/files/folders/40683/download.aspx"&gt;&lt;STRONG&gt;here&lt;BR&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=40689" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="BizTalk" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/BizTalk/default.aspx" /></entry><entry><title>BizTalk Message Helper Methods</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/04/17/biztalk-message-helper-methods.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/04/17/biztalk-message-helper-methods.aspx</id><published>2007-04-17T00:21:00Z</published><updated>2007-04-17T00:21:00Z</updated><content type="html">This entry describes two helper methods to interact with messages in a BizTalk orchestration. The first helper methods will return the string representation of a BizTalk message. The methods are as below: /// &amp;lt;summary&amp;gt; /// Pass in a BizTalk Message will return a string /// &amp;lt;/summary&amp;gt; /// &amp;lt;param name="btsMessage"&amp;gt;The BizTalk message to get the string from&amp;lt;/param&amp;gt; /// &amp;lt;returns&amp;gt;The string from the Body of the BTS Message&amp;lt;/returns&amp;gt; public static string GetStringFromBTSMessageBody(XLANGMessage...(&lt;a href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/04/17/biztalk-message-helper-methods.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=40328" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="Newsletter" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/Newsletter/default.aspx" /><category term="BizTalk" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/BizTalk/default.aspx" /></entry><entry><title>Turning an Immutable Message in BizTalk into a Mutable message</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/04/09/turning-an-immutable-message-in-biztalk-into-a-mutable-message.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/04/09/turning-an-immutable-message-in-biztalk-into-a-mutable-message.aspx</id><published>2007-04-09T23:19:00Z</published><updated>2007-04-09T23:19:00Z</updated><content type="html">&lt;P&gt;One thing that you learn pretty fast in BizTalk is that messages in an orchestration are immutable/read only.&lt;/P&gt;
&lt;P&gt;If you need to modify a message in a BizTalk orchestration, you are pretty well restricted to using a Construct shape with encapsulated Transform and/or Message Assignment shapes to create a modified version or a copy of the original message. Distinguished fields,xpath statements, BizTalk maps, custom .Net components, etc. can be used to modify the message.&lt;/P&gt;
&lt;P&gt;Below is one simple technique that can be used to modify a message anywhere in an orchestration.&lt;BR&gt;Helper&amp;nbsp;class(s) are required, but in certain situations (explained below) this technique can be used to easily modify a message anywhere in an orchestration.&lt;/P&gt;
&lt;P&gt;Below is an orchestration where this technique is used:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/37818/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Very simply this orchestration subscribes to a PO xml message and then produces a &lt;BR&gt;final Invoice XML message that is send out from the orchestration.&lt;/P&gt;
&lt;P&gt;Below are the artifacts used in the solution:&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH:246px;HEIGHT:262px;" height=262 src="http://objectsharp.com/cs/files/folders/38898/download.aspx" width=246&gt;&lt;/P&gt;
&lt;P&gt;The artifacts for the BizTalk project, BTS_Immutable_To_Mutable include:&lt;BR&gt;&lt;BR&gt;1) ClassOrchestration.odx (Orchestration as above)&lt;BR&gt;2) Invoice.xsd (schema for outgoing Invoice XML message)&lt;BR&gt;3) PO.xsd (schema for incoming PO XML message).&lt;BR&gt;4) InvoiceClassGen.bat and POClassGen.bat&lt;/P&gt;
&lt;P&gt;Below is the InvoiceClassGen.bat file:&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://objectsharp.com/cs/files/folders/37819/download.aspx"&gt;&lt;/P&gt;
&lt;P&gt;The above uses the .Net xsd.exe utility to generate an Invoice.cs class from the Invoice.xsd schema.&lt;BR&gt;This Invoice.cs class is used in the Class_Immutable_To_Mutable project as below.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The artifacts for the Class Library project, Class_Immutable_To_Mutable include:&lt;/P&gt;
&lt;P&gt;1) Helper.cs (Helper Class to populate the some of the fields of the Invoice)&lt;BR&gt;2) Invoice.cs (Invoice class for variable in the orchestration)&lt;BR&gt;3) PO.cs (PO class for variable in the orchestration)&lt;/P&gt;
&lt;P&gt;This orchestration will:&lt;/P&gt;
&lt;P&gt;1) Accept a PO xml message&lt;/P&gt;
&lt;P&gt;2) As below, in an expression shape, assign the BTS PO message to a BTS variable message of type PO.cs&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;// Set the BTS Variable PO to the incoming BTS Message PO&lt;/STRONG&gt;&lt;BR&gt;&lt;STRONG&gt;varPO = msgPO;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;3) As below, in an expression shape, populate some of the Invoice fields from the PO fields:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;// Populate some of the fields in the BTS Invoice Variable,&lt;BR&gt;// from the BTS PO variable fields. &lt;BR&gt;varInvoice.TotalAmt = varPO.Amt;&lt;BR&gt;varInvoice.TotalCount = varPO.Qty;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;4) As below, in an expression shape, call a helper class to populate and return the Invoice Items class:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;varInvoice.Items = Class_Immutable_To_Mutable.Helper.mapPOItemsToInvoiceItems(varPO);&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;5) As below, in an expression shape, call a helper class to return and assign the description for the invoice Description field.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;// Set the BTS Variable Description field&lt;BR&gt;varInvoice.Description = Class_Immutable_To_Mutable.Helper.GetInvoiceDesc(varInvoice);&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;6) As below, in an expression shape, call a helper class to return and assign the version for the invoice Version field:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;// Set the BTS Message Invoice Version field&lt;BR&gt;varInvoice.Version = Class_Immutable_To_Mutable.Helper.GetInvoiceVersion();&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;7) Finally at the end, in a Construct/Message Assignment shape, construct the the outgoing BTS Invoice message:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;// Create the BTS Invoice message from the Variable Invoice message&lt;BR&gt;msgInvoice = varInvoice;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;8) Send out the Final Invoice XML message&lt;BR&gt;&amp;nbsp;&lt;BR&gt;So after all of this, could a BizTalk map been used to create the Invoice message from the PO message. The answer is yes or no depending on the mapping logic that is needed.&lt;/P&gt;
&lt;P&gt;This leads to when use this method:&lt;BR&gt;Creation of a message requires multiple calls to Helper components/Business Rules to create the message. &lt;/P&gt;
&lt;P&gt;Some of the upsides to using this approach are:&lt;BR&gt;1) Using the above technique takes away the restriction of the immutable message and working with a mutable variable in the orchestration.&lt;BR&gt;2) Intellisense is available on the variables inside of the orchestration.&lt;BR&gt;3) The variable can be modified directly in an expression shape inside of the orchestration, without the use of distinguished fields or xpath statements.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Some of the downsides to using this approach are:&lt;BR&gt;1) The overhead of deserialization and serialization from Message to Variable and visa versa.&lt;BR&gt;2) Creating and maintaining the Helper classes (in this case PO.cs and Invoice.cs)&lt;BR&gt;&lt;BR&gt;You can download&amp;nbsp;the above example &lt;A class="" href="http://objectsharp.com/cs/files/folders/38910/download.aspx"&gt;&lt;STRONG&gt;HERE&lt;/STRONG&gt;&lt;/A&gt; (Zip File).&lt;BR&gt;Read the &lt;A class="" href="http://objectsharp.com/cs/files/folders/38911/download.aspx"&gt;&lt;STRONG&gt;Readme&lt;/STRONG&gt;&lt;/A&gt; before installing and running the example.&lt;/P&gt;
&lt;P&gt;For a similar example, goto&amp;nbsp;&lt;STRONG&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/biztalk/aa937647.aspx"&gt;Here&lt;/A&gt;&lt;/STRONG&gt;&lt;BR&gt;and download the &lt;A href="http://download.microsoft.com/download/b/1/d/b1d9ddf9-88c6-4d4e-abea-4787fdc85bec/customnettypeinorchestration.exe"&gt;&lt;STRONG&gt;Using a Custom .NET Type for a Message in Orchestrations&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;example.&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=36879" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="Newsletter" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/Newsletter/default.aspx" /><category term="BizTalk" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/BizTalk/default.aspx" /></entry><entry><title>Follow up to Fundamentals of WF Presentation and Developer Resources for WF</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/03/24/follow-up-to-fundamentals-of-wf-presentation-and-developer-resources-for-wf.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/03/24/follow-up-to-fundamentals-of-wf-presentation-and-developer-resources-for-wf.aspx</id><published>2007-03-24T19:59:00Z</published><updated>2007-03-24T19:59:00Z</updated><content type="html">&lt;P&gt;A few people asked for the demos from this &lt;A class="" href="http://objectsharp.com/cs/blogs/matt/archive/2007/03/19/fundamentals-of-wf.aspx" target=_blank&gt;&lt;STRONG&gt;presentation&lt;/STRONG&gt;&lt;/A&gt;.&lt;BR&gt;&lt;BR&gt;Links for the presentation are at the bottom of the post&lt;/P&gt;
&lt;P&gt;If you have not already set up your development environment for Windows Workflow Foundation (WF) Development, follow the below steps:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Prerequisites:&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;a) Windows XP, Windows 2003, Windows Vista&lt;BR&gt;b) Visual Studio 2005&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Install the following:&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1) &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=10CC340B-F857-4A14-83F5-25634C3BF043&amp;amp;displaylang=en"&gt;&lt;STRONG&gt;.Net Framework 3.0 Redistributable&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;2) &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en"&gt;&lt;STRONG&gt;Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;3) You can also optionally download and install:&lt;BR&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C2B1E300-F358-4523-B479-F53D234CDCCF&amp;amp;displaylang=en"&gt;&lt;STRONG&gt;Microsoft® Windows® Software Development Kit for Windows Vista™ and .NET Framework 3.0 Runtime&amp;nbsp; Components&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Before installing the above read the provided instructions. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Below are some resources for using/learning/developing with WF:&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms735967.aspx"&gt;&lt;STRONG&gt;MSDN - Windows Workflow Foundation&lt;/STRONG&gt;&lt;/A&gt; &lt;BR&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms735927.aspx"&gt;&lt;STRONG&gt;MSDN - Windows Workflow Foundation Tutorials&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms732093.aspx"&gt;&lt;STRONG&gt;MSDN - Windows Workflow Foundation General Reference&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;A class="" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032303235&amp;amp;EventCategory=3&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Getting Started with Windows Workflow Foundation Server Virtual Lab&lt;/A&gt;&lt;/STRONG&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=2e575633-e357-4ee7-aaff-34138f00e830&amp;amp;displaylang=en"&gt;Hands-on Labs for Windows® Workflow Foundation&lt;/A&gt;&lt;/STRONG&gt;&lt;BR&gt;&lt;A class="" href="https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=67819"&gt;&lt;STRONG&gt;Clinic 5136: Introduction to Developing with Windows® Workflow Foundation and Visual Studio® 2005&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx"&gt;&lt;STRONG&gt;Windows Workflow Foundation Developer Centre&lt;/P&gt;&lt;/STRONG&gt;&lt;/A&gt;
&lt;P&gt;Also please read &lt;STRONG&gt;&lt;A class="" href="http://blogs.msdn.com/pandrew/"&gt;Paul Andrews&lt;/A&gt;&lt;/STRONG&gt; blog (Windows Workflow Foundation Technical Product Manager at&amp;nbsp;Microsoft) for the latest and greatest on WF.&lt;/P&gt;
&lt;P&gt;Download the &lt;A class="" href="http://objectsharp.com/cs/files/folders/37700/download.aspx"&gt;&lt;STRONG&gt;presentation&lt;/STRONG&gt;&lt;/A&gt; demos here.&lt;BR&gt;Please read &lt;A class="" href="http://objectsharp.com/cs/files/folders/37702/download.aspx"&gt;&lt;STRONG&gt;this&lt;/STRONG&gt;&lt;/A&gt; before trying to run.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=35842" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="WF" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/WF/default.aspx" /></entry><entry><title>MVP Summit 2007</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/03/23/mvp-summit-2007.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/03/23/mvp-summit-2007.aspx</id><published>2007-03-24T02:54:00Z</published><updated>2007-03-24T02:54:00Z</updated><content type="html">&lt;p&gt;There was a delay in posting this, but just wanted to write a quick note on the MVP &lt;a href="http://mvp.support.microsoft.com/MVPsummit" class=""&gt;&lt;b&gt;Summit&lt;/b&gt;&lt;/a&gt; that I attended last week (March 12 - March 15)&lt;/p&gt;
&lt;p&gt;Overall this was an awesome event, well organized, great sessions.&lt;/p&gt;
&lt;p&gt;Thanks to &lt;b&gt;Sasha Krsmanovic&lt;/b&gt; (MVP Lead - Canada) who provided all the Canadian MVP's with &lt;a href="http://www.flickr.com/photos/canadian_mvp/" class=""&gt;&lt;b&gt;Red Olympic Hockey Jerseys&lt;/b&gt;&lt;/a&gt;&amp;nbsp;worn on the 2nd day of the summit.&amp;nbsp; This really pumped up the Canadian MVPs at Bill Gate's key note that carried on during the&amp;nbsp; rest of the Summit. I received quite of few comments from other non Canadian MVPs about the&amp;nbsp;jersey even when I wasn't wearing the jersey on day 3 of the summit&lt;br&gt;&lt;br&gt;First couple of days at the summit I was hanging out with fellow MVP &lt;a href="http://www.objectsharp.com/" class=""&gt;&lt;b&gt;Objectsharpees&lt;/b&gt;&lt;/a&gt;&lt;br&gt;(past/present and future?):&lt;br&gt;&lt;a href="http://www.objectsharp.com/cs/blogs/barry/" class=""&gt;&lt;b&gt;Barry Gervin&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/b&gt;&lt;a href="http://www.objectsharp.com/cs/blogs/bruce/" class=""&gt;&lt;b&gt;Bruce Johnson&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&lt;br&gt;&lt;/b&gt;&lt;a href="http://msmvps.com/blogs/windsor/" class=""&gt;&lt;b&gt;Rob Winsdor&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/b&gt;&lt;a href="http://geekswithblogs.net/mcassell" class=""&gt;&lt;b&gt;Matt Cassel&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/b&gt;&lt;b&gt;&lt;a href="http://teamsystemrocks.com/blogs/jldavid/" class=""&gt;Jean-Luc David&lt;/a&gt; &lt;br&gt;&lt;a href="http://triplez.mine.nu/blog/" class=""&gt;Justin Lee&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/b&gt;&lt;br&gt;Next couple of days of the summit, I was at the BizTalk/ &lt;a href="http://www.microsoft-watch.com/content/operating_systems/microsoft_forms_new_connected_systems_division.html" class=""&gt;&lt;b&gt;Connected Systems Division&lt;/b&gt;&lt;/a&gt;&amp;nbsp;specific sessions. &lt;/p&gt;
&lt;p&gt;Below are some of the BizTalk MVPs&amp;nbsp;that attended&amp;nbsp;the summit. Sorry if I did not list everyone.&lt;br&gt;&lt;br&gt;&lt;a href="http://www.winterdom.com/weblog/" class=""&gt;&lt;b&gt;Tomas Restrepo&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp; &lt;br&gt;&lt;/b&gt;&lt;a class=""&gt;&lt;b&gt;Brian&amp;nbsp; Loesgen&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&lt;br&gt;Scott&amp;nbsp; Cairney&amp;nbsp; &lt;br&gt;Ibrahim&amp;nbsp; Gokalp &lt;br&gt;&lt;/b&gt;&lt;a href="http://blog.paul.somers.com/blog" class=""&gt;&lt;b&gt;&lt;/b&gt;&lt;/a&gt;&lt;a href="http://www.geekswithblogs.net/sthomas/" class=""&gt;&lt;b&gt;Stephen Thomas&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;br&gt;&lt;/b&gt;&lt;a class=""&gt;&lt;b&gt;Alan Smith&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;Romualdas Stonkus &lt;br&gt;&lt;/b&gt;&lt;a href="http://www.masteringbiztalk.com/blogs/jon/" class=""&gt;&lt;b&gt;Jon&amp;nbsp; Flanders&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp; &lt;br&gt;&lt;/b&gt;&lt;a href="http://weblogs.asp.net/gsusx/" class=""&gt;&lt;b&gt;Jesus Rodriguez&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp; &lt;br&gt;&lt;/b&gt;&lt;a href="http://blogs.breezetraining.com.au/mickb/" class=""&gt;&lt;b&gt;Mick&amp;nbsp; Badran&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp; &lt;br&gt;&lt;/b&gt;&lt;a class=""&gt;&lt;b&gt;Scott Colestock&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&lt;br&gt;&lt;/b&gt;&lt;a href="http://www.jonfancey.com/default.aspx" class=""&gt;&lt;b&gt;Jon Fancey&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;Jeff Juday&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;/b&gt;&lt;a class=""&gt;&lt;b&gt;Charles Young&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;Here are a few posts on the content of the BizTalk/Connected System MVP sessions.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/cyoung/archive/2007/03/15/108881.aspx" class=""&gt;Day3&lt;/a&gt; &lt;br&gt;&lt;a href="http://blogs.breezetraining.com.au/mickb/2007/03/16/MVPSummitWrapUp.aspx" class=""&gt;Day3&lt;/a&gt; &lt;br&gt;&lt;a href="http://geekswithblogs.net/cyoung/archive/2007/03/17/109056.aspx" class=""&gt;Day4&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;br&gt;Finally a big thanks to &lt;b&gt;Marjan Kalantar&lt;/b&gt; (Microsoft's Connected Systems Division Community&amp;nbsp; &lt;br&gt;Lead), who put together and organized an eclectic spread of talks that covered the Connected&amp;nbsp; &lt;br&gt;Systems Division and the informal sessions with the Product groups.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=35751" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="BizTalk" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/BizTalk/default.aspx" /></entry><entry><title>Fundamentals of WF</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2007/03/19/fundamentals-of-wf.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2007/03/19/fundamentals-of-wf.aspx</id><published>2007-03-19T23:59:00Z</published><updated>2007-03-19T23:59:00Z</updated><content type="html">&lt;P&gt;Tomorrow (March 20) I am doing a presentation at the Metro Toronto .Net User Group entitled:&lt;BR&gt;&lt;STRONG&gt;Fundamentals of Windows Workflow Foundation (WF).&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Most of it will be demos introducing WF. Of course, I will also include BizTalk in the presentation, discussing the differences and similarities between WF and BizTalk and when it is appropriate to use either technology. &lt;/P&gt;
&lt;P&gt;The demos will include:&lt;/P&gt;
&lt;P&gt;Creating a Sequential Workflow&lt;BR&gt;Communicating with the Host&lt;BR&gt;Logging Workflows&lt;BR&gt;Persisting Workflows&lt;BR&gt;Creating Custom Activities&lt;BR&gt;Creating a State Machine Workflow&lt;BR&gt;Using WF and BizTalk together&lt;/P&gt;
&lt;P&gt;You can sign up for the presentation here:&lt;BR&gt;&lt;A href="http://www.metrotorontoug.com/User+Group+Events/379.aspx"&gt;http://www.metrotorontoug.com/User+Group+Events/379.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=34414" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="WF" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/WF/default.aspx" /></entry><entry><title>Failed Message Routing and Failed Orchestration Routing in BizTalk 2006</title><link rel="alternate" type="text/html" href="http://www.objectsharp.com/cs/blogs/matt/archive/2006/11/01/4110.aspx" /><id>http://www.objectsharp.com/cs/blogs/matt/archive/2006/11/01/4110.aspx</id><published>2006-11-01T21:51:00Z</published><updated>2006-11-01T21:51:00Z</updated><content type="html">&lt;p&gt;This post discusses Failed Message Routing and Failed Orchestration Routing in BizTalk 2006&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Failed Message Routing&lt;br /&gt;&lt;/u&gt;&lt;br /&gt;Failed Message Routing is a new feature of BizTalk 2006.&lt;br /&gt;You can read about it here: &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/bts06coredocs/html/d081934c-600e-44ce-8ba4-fb646d494589.asp"&gt;&lt;strong&gt;Using Failed Message Routing&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Below is an excerpt from the above help topic:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What Does Failed Message Routing Consist Of?&lt;br /&gt;&lt;br /&gt;When failed message routing is enabled, BizTalk Server does not suspend the message—it routes the message instead. Failed message routing can be enabled on both receive and send ports, with the following results:&lt;br /&gt;If failed message routing is enabled on a receive port and a message fails in the receive pipeline or in routing, a failed message is generated. In the case where an error occurs in or before the disassembly phase, the error message is a clone of the original interchange. If failed message routing is enabled on a send port and the message fails in the send pipeline, a failed message is generated. When a failed message is generated, BizTalk Server promotes error-report-related message context properties and demotes regular message context properties before publishing the failed message. Compare this to the default behavior when failed message routing is not enabled: Messages that fail are suspended.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There is much more information in the above article. I would highly recommend reading it. One of the properties promoted on a failed message is:&lt;/p&gt;
&lt;p&gt;ErrorReport.ErrorMessage = "FailedMessage"&lt;/p&gt;
&lt;p&gt;You can then subscribe to a failed message using a Send Port or Orchestration by filtering on the above property.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Failed Orchestrations Routing&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;There is no such thing. If an orchestration suspends, the orchestration and its contained messages will become suspended. If you have an orchestration or send port with a filter such as:&lt;br /&gt;ErrorReport.ErrorMessage = "FailedMessage" &lt;/p&gt;
&lt;p&gt;It will not subscribe to the failed orchestration. No failed message is automatically generated that can be subscribed to on orchestration failure.&amp;nbsp;But, if you have set up a subscriber that is set up for Failed Message Routing and would like a message generated by the Failed Orchestration to be routed to the same subscriber, you can do the below:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; As below, add a scope shape and exception block in the orchestration to catch exceptions in the orchestration:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.objectsharp.com/blogs/matt/images/FailedMessageOrc.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; In the exception block construct a new message in the orchestration. While constructing the new message, promote the following property:&lt;/p&gt;
&lt;p&gt;msgError(ErrorReport.ErrorType) = "FailedMessage";&lt;/p&gt;
&lt;p&gt;See below for an example:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.objectsharp.com/blogs/matt/images/FailedMessageCreateMsg.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3)&lt;/strong&gt; As below, use the orchestration view to create the following Correlation Type. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.objectsharp.com/blogs/matt/images/FailedMessageCorrelationType.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4)&lt;/strong&gt; As below, use the orchestration view to create a Correlation Set that derives from the Correlation Type.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.objectsharp.com/blogs/matt/images/FailedMessageCorrelationSet.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5)&lt;/strong&gt; As below add a Send shape to send out the newly constructed message. For the properties of the Send Shape, initialize the correlation set from 4). &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.objectsharp.com/blogs/matt/images/FailedMessageInitializeCorrelationSet.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6)&lt;/strong&gt; As below, link the send shape to a Logical Send port in the orchestration that will do a direct send into the messagebox.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.objectsharp.com/blogs/matt/images/FailedMessageDirectSend.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7)&lt;/strong&gt; The ErrorReport.ErrorType is now promoted on the error message and you can now subscribe to it, using a filter condition as:&lt;/p&gt;
&lt;p&gt;ErrorReport.ErrorType = FailedMessage &lt;br /&gt;(if using a send port)&lt;br /&gt;Or:&lt;br /&gt;ErrorReport.ErrorType = "FailedMessage"&lt;br /&gt;(For a Receive Shape in an orchestration.)&lt;/p&gt;
&lt;p&gt;Note: You can also promote your own custom context property as described &lt;a href="http://realise-systems.net/blog/jsaull/archive/2004/12/08/557.aspx"&gt;&lt;strong&gt;Here&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;There is an example that you can download &lt;a href="http://www.objectsharp.com/blogs/matt/images/FailedOrchestrationRouting.zip"&gt;&lt;strong&gt;Here&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;. &lt;/strong&gt;Read the &lt;a href="http://www.objectsharp.com/blogs/matt/images/ReadMeFailedMessageOrc.txt"&gt;&lt;strong&gt;Readme&lt;/strong&gt;&lt;/a&gt; before installing.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.objectsharp.com/cs/aggbug.aspx?PostID=4110" width="1" height="1"&gt;</content><author><name>matt</name><uri>http://www.objectsharp.com/cs/members/matt.aspx</uri></author><category term="BizTalk" scheme="http://www.objectsharp.com/cs/blogs/matt/archive/tags/BizTalk/default.aspx" /></entry></feed>