<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Rfid Factotum</title><link>http://blogs.msdn.com/masimms/default.aspx</link><description>Mark Simms' Blog</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>(Part 1) – Motorola XR450 and BizTalk RFID: Hands On</title><link>http://blogs.msdn.com/masimms/archive/2009/06/29/part-1-motorola-xr450-and-biztalk-rfid-hands-on.aspx</link><pubDate>Mon, 29 Jun 2009 23:46:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9808926</guid><dc:creator>masimms</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/masimms/comments/9808926.aspx</comments><wfw:commentRss>http://blogs.msdn.com/masimms/commentrss.aspx?PostID=9808926</wfw:commentRss><description>&lt;p&gt;Continuing the (much delayed) postings on putting together basic end to end systems with RFID readers and BizTalk RFID, I’m going to delve into how to configure and deploy Motorola’s XR450 RFID reader.&amp;#160; As usual, the primary steps covered are:&lt;/p&gt;  &lt;li&gt;Setting up the reader (from the shipping box to the network) &lt;/li&gt;  &lt;li&gt;Performing native firmware updates &lt;/li&gt;  &lt;li&gt;Connectivity and configuration with Biztalk RFID &lt;/li&gt;  &lt;li&gt;Building a basic business logic and reporting interface    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;h2&gt;Setting up the reader (from the shipping box to the network)&lt;/h2&gt;    &lt;p&gt;Every RFID reader is a little different in terms of power, network and antenna, so being familiar with the specifics of the readers you employ in your solutions is vitally important.&amp;#160; While Biztalk RFID does an excellent job of abstracting away many of the software and management related details, all the software in the world won't help if you can't turn the reader on! :)&lt;/p&gt;    &lt;p&gt;From Motorola’s &lt;a href="http://www.motorola.com/Business/US-EN/Business+Product+and+Services/Enterprise+Mobility/XR450+Fixed+RFID+Reader_US-En"&gt;web site&lt;/a&gt;:&lt;/p&gt;    &lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" title="XR400" alt="XR400" align="left" src="http://www.motorola.com/staticfiles/Business/Products/RFID/RFID Readers/XR450/_Images/Static Files/XR400_MD_US-EN.jpg" width="259" height="259" /&gt;Motorola’s XR450 RFID reader is an industrial-class, fixed RFID reader designed for business-critical, dense-reader deployments. With both mono-static and bi-static antenna operation capability, it has the flexibility to meet a wide range of application and environment needs.&lt;/p&gt;    &lt;p&gt;     &lt;br /&gt;The XR450 fixed reader provides ease of integration and rich application support while reading tags reliably and efficiently. It provides comprehensive application flexibility, including support for direct application hosting; standard back-end platforms from IBM, Microsoft, SAP and others; and the ability to interact with industrial automation equipment such as conveyors.&lt;/p&gt;    &lt;p&gt;Some of the key features of this device include:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;- Operation in bi-static or mono-static modes (this is fairly new in the XR series line, especially for North American targeted readers). &lt;/li&gt;      &lt;li&gt;- Support for LLRP (Low Level Reader Protocol) as well as Motorola’s native API.&amp;#160; Note: the XR450 can only support one concurrent interface type (i.e. either LLRP _or_ native API – but not both at the same time). &lt;/li&gt;      &lt;li&gt;&lt;/li&gt;      &lt;li&gt;       &lt;h3&gt;Documents and Software:&lt;/h3&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;- &lt;a href="http://support.symbol.com/support/browse.do?WidgetName=BROWSE_PRODUCT&amp;amp;IsRootNode=true&amp;amp;param_document=sp&amp;amp;TaxoName=SG_SupportGoals&amp;amp;BROWSE_PRODUCT.isProductTaxonomy=true&amp;amp;BROWSE_PRODUCT.NodeId=SG_XR450_1_2&amp;amp;BROWSE_PRODUCT.thisPageUrl=%2Fproduct%2Fproducts.do&amp;amp;id=m4&amp;amp;BROWSE_PRODUCT.TaxoName=SG_SupportGoals&amp;amp;NodeType=leaf&amp;amp;NodeName=XR450&amp;amp;document=DT_PRODUCTMANUALS_1_1&amp;amp;BROWSE_PRODUCT.NodeType=leaf&amp;amp;NodeId=SG_XR450_1_2&amp;amp;AppContext=AC_ProductPage&amp;amp;param_document=sp"&gt;Document and Software Download Site&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;p&gt;- &lt;a href="http://support.symbol.com/support/search.do?cmd=displayKC&amp;amp;docType=kc&amp;amp;externalId=SIGN71773pdf&amp;amp;sliceId=&amp;amp;dialogID=11201367&amp;amp;stateId=0 0 11193498"&gt;XR Series RFID Readers Integrator Guide&lt;/a&gt;&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;h6&gt;Connecting the Serial Connection&lt;/h6&gt;    &lt;p&gt;When setting up a reader for the first time, or performing low-level debugging a serial connection is invaluable.&amp;#160; If your PC or laptop does not have a built-in serial port, I would highly recommend purchasing a USB-to-serial adapter such as &lt;a href="http://sewelldirect.com/usbtoserial.asp"&gt;this one&lt;/a&gt;.&amp;#160;&amp;#160; Note that most big-box retailers or computer stores will carry a similar product in stock.&amp;#160; In addition to the physical connection, you'll need a terminal adapter program.&amp;#160; Note that since Hyperterminal is not a part of Windows Vista, you likely don't have a built-in one available.&amp;#160; I like a number of different (freeware) products, such as &lt;a href="http://www.ayera.com/teraterm/"&gt;TeraTerm Pro&lt;/a&gt;.&amp;#160; After downloading and installing Tera Term Pro, start the application.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_4.png"&gt;&lt;img border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_1.png" width="244" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Select the appropriate COM port (if using a USB-to-serial converter see the manufacturer documentation for details), and click &lt;strong&gt;OK&lt;/strong&gt;.&amp;#160; Built-in COM ports are usually COM1.&amp;#160; Click on &lt;strong&gt;Setup&lt;/strong&gt;, then &lt;strong&gt;Serial port &lt;/strong&gt;to configure the serial port settings.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_6.png"&gt;&lt;img border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_2.png" width="389" height="227" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;The serial communication settings for the Motorola XR450 are 38400 8N1 (or, 38400 baud rate, 8 bit data, none parity, 1 bit stop, none flow control).&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb.png" width="244" height="214" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;h4&gt;Powering the Reader&lt;/h4&gt;    &lt;p&gt;If we can’t successfully power the reader, this is going to be a very short blog post.&amp;#160; The XR series readers use a 24 VDC @ 2.5 A transformer “brick” with an connector that securely fastens to the reader by way of turn-and-lock mechanism.&amp;#160; As of the time this article was written, the adapter is a &lt;em&gt;GlobTek Inc ITE Power Supply&lt;/em&gt;.&amp;#160; &lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;Connect an Ethernet cable between an available network hub, and the 10/100 Base-T port on the XR450 reader. &lt;/li&gt;      &lt;li&gt;Connect a serial cable between the SERIAL port (not the GPIO port) on the Speedway Reader and your computer’s serial port. &lt;/li&gt;      &lt;li&gt;Connect an antenna to one of the available antenna ports (TX1 - TX4).        &lt;ol&gt;         &lt;li&gt;Note: this assumes that we’ll be using the reader in mono-static or single TX/RX port configuration.&amp;#160; If not, connect another antenna to the matching RX1 – RX4 port. &lt;/li&gt;       &lt;/ol&gt;     &lt;/li&gt;      &lt;li&gt;Plug one end of the transformer into an available power outlet, and the other into the +24 VDC port on the XR reader. &lt;/li&gt;   &lt;/ol&gt;    &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Clearing SDRAM ... Complete
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}}}BootStrap of XR400 V 4.01.0000
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Copyright 1999-2005, Symbol Technologies
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Copying Monitor image to RAM ...
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;|
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Run Monitor_0 ....}}}Flash Info: wMfgId=0x89, wDevId=0x891C
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Flash Info: flashDeviceSize=0x2000000, blockSize=0x20000, bootBlockSize=0x8000
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Done: P30 Flash Unlocked
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Check BootData to Update system ......
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Do nothing for recovery.
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Copying CE image to RAM ...
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;|
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Booting Windows CE ...&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;Unlike other models of readers the management console will NOT automatically appear!&amp;#160; In order to display the management console, type &lt;strong&gt;AdvancedReaderConsole&lt;/strong&gt;, or &lt;strong&gt;ARC &lt;/strong&gt;for short, then hit enter.&lt;/p&gt;

  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;ARC
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        ****** Symbol XR450 RFID Reader Serial Console ******
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;Please enter user name:
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;The default username and password are &lt;strong&gt;admin &lt;/strong&gt;and &lt;strong&gt;change.&amp;#160; &lt;/strong&gt;Entering these brings up the serial option console.&amp;#160; If you get the username and password wrong, you need to type &lt;strong&gt;ARC &lt;/strong&gt;again to bring up the login screen.&lt;/p&gt;

  &lt;p&gt;&amp;#160;&lt;/p&gt;

  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;Current Configuration:
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        Serial Number: C80507AF82805945   MAC Address: 00:A0:F8:C2:02:D5
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         1 -- DHCP               : ON
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         * -- IP Address         : 172.27.166.75
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         3 -- BSP Port           : 3000
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         * -- Network Mask       : 255.255.255.0
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         * -- Gateway            : 172.27.166.1
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         * -- DNS Host           : 157.54.14.146
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         7 -- Web Server Mode    : HTTP
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         8 -- HTTP Port             : 80
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;         9 -- Shell Type         : Telnet
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        10 -- File Transfer Mode : FTP
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        11 -- Watchdog           : Enabled
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        12 -- Trusted Hosts Only : OFF
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        13 -- Commit Change
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        14 -- Discard Change
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        15 -- Exit
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        16 -- Reboot
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        17 -- Show system log
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        18 -- Trace system log   : OFF
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        19 -- TCP Timeout (mins) : 0
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        20 -- BSP Mode           : Unsecured
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        21 -- HTTPS Port                    : 443
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;        22 -- BSP User Auth      : OFF
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;* These are current system values &lt;span style="color: #0000ff"&gt;and&lt;/span&gt; cannot be changed while DHCP is ON
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 10px"&gt;Select the menu number to change the item value:&lt;/pre&gt;&lt;/pre&gt;

  &lt;p&gt;From this console you can change the network configuration, interface options, view the system log and reboot the reader.&amp;#160; You cannot read tags, change the password, etc.&amp;#160; The purpose of this interface is to get the reader network-accessible, and then perform additional diagnostics using the web console.&lt;/p&gt;

  &lt;p&gt;Once logged into the device, you may use the following commands: &lt;/p&gt;

  &lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;
      &lt;tr&gt;
        &lt;td valign="top" width="200"&gt;Configuring the device to use DHCP&lt;/td&gt;

        &lt;td valign="top" width="200"&gt;1 &amp;lt;Enter&amp;gt; 
          &lt;br /&gt;Toggles DHCP on and off&lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td valign="top" width="200"&gt;Configuring the device to use a static IP address &lt;/td&gt;

        &lt;td valign="top" width="200"&gt;Turn off DHCP 
          &lt;br /&gt;2&amp;lt;Enter&amp;gt; [new IP address] 

          &lt;br /&gt;4&amp;lt;Enter&amp;gt; [new netmask] 

          &lt;br /&gt;5&amp;lt;Enter&amp;gt; [new gateway]&lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td valign="top" width="200"&gt;Rebooting the reader&lt;/td&gt;

        &lt;td valign="top" width="200"&gt;16&amp;lt;Enter&amp;gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;

  &lt;h2&gt;&amp;#160;&lt;/h2&gt;

  &lt;h2&gt;Scanning Tags&lt;/h2&gt;

  &lt;br /&gt;

  &lt;p&gt;I always recommend checking for tag scans with the lowest number of moving parts (i.e. if tag reads aren't showing up in a report there are many potential sources of failure - tag, antenna, reader, network, middleware, database and the report itself).&amp;#160; Scanning tags using the web console involves these key steps:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Ensuring that the reader has active/enabled antennae. &lt;/li&gt;

    &lt;li&gt;Ensuring that the reader is in native-API (i.e. not LLRP) mode.&amp;#160; In LLRP mode the reader will only scan tags with a connected LLRP client (such as BizTalk RFID). &lt;/li&gt;

    &lt;li&gt;Enabling polling (such that the reader is autonomously scanning for tags) &lt;/li&gt;

    &lt;li&gt;Querying the internal tag list. &lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;Ensuring that the reader has active/enabled antennae.&lt;/h3&gt;

  &lt;p&gt;To ensure that the reader has active/enabled antennae:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;Open an Internet Explorer window and browse to the IP address of the reader. &lt;/li&gt;

    &lt;li&gt;Log in with the username and password (defaults are username &lt;strong&gt;admin &lt;/strong&gt;and password &lt;strong&gt;change&lt;/strong&gt;). &lt;/li&gt;

    &lt;li&gt;From the Reader Administration Console, click on Status.&amp;#160; We want to make sure that the reader has active/enabled antennae.&amp;#160; In the status summary of the reader, ensure that at least one read point (aka antenna or antenna pair) is enabled (i.e. Read Points / Enabled &amp;gt;= 1). &lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_3.png" width="674" height="624" /&gt;&lt;/a&gt; &lt;/p&gt;

  &lt;h3&gt;Ensuring that the reader is in native-API (i.e. not LLRP) mode&lt;/h3&gt;
&lt;/li&gt;

&lt;li&gt;Open an Internet Explorer window and browse to the IP address of the reader. &lt;/li&gt;

&lt;li&gt;Log in with the username and password (defaults are username &lt;strong&gt;admin &lt;/strong&gt;and password &lt;strong&gt;change&lt;/strong&gt;). &lt;/li&gt;

&lt;li&gt;From the Reader Administration Console, click on &lt;strong&gt;Maintenance&lt;/strong&gt;, then on &lt;strong&gt;Communication&lt;/strong&gt;.&amp;#160; If &lt;strong&gt;LLRP is Running &lt;/strong&gt;is displayed, then we need to deactivate it by clicking on the &lt;strong&gt;Deactivate LLRP &lt;/strong&gt;button. 

  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_4.png" width="852" height="631" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;Since none of the changes will take effect until committed (i.e. saved), we need to commit changes by clicking on the &lt;strong&gt;Commit/Revert &lt;/strong&gt;menu option, then click the &lt;strong&gt;Commit &lt;/strong&gt;button. 

  &lt;p&gt;&lt;/p&gt;

  &lt;p&gt;&lt;/p&gt;

  &lt;p&gt;&lt;/p&gt;

  &lt;blockquote&gt;
    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_5.png" width="644" height="362" /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;/blockquote&gt;

  &lt;h3&gt;Enabling Polling&lt;/h3&gt;
&lt;/li&gt;

&lt;li&gt;Open an Internet Explorer window and browse to the IP address of the reader. &lt;/li&gt;

&lt;li&gt;Log in with the username and password (defaults are username &lt;strong&gt;admin &lt;/strong&gt;and password &lt;strong&gt;change&lt;/strong&gt;). &lt;/li&gt;

&lt;li&gt;From the Reader Administration Console, click on &lt;strong&gt;Scan Control.&lt;/strong&gt; &lt;/li&gt;

&lt;li&gt;If &lt;strong&gt;Reader is not polling &lt;/strong&gt;is displayed, click on &lt;strong&gt;Enable Polling&lt;/strong&gt;. &lt;/li&gt;

&lt;li&gt;Since none of the changes will take effect until committed (i.e. saved), we need to commit changes by clicking on the &lt;strong&gt;Commit/Revert &lt;/strong&gt;menu option, then click the &lt;strong&gt;Commit &lt;/strong&gt;button. 

  &lt;h3&gt;Querying the internal tag list&lt;/h3&gt;
&lt;/li&gt;

&lt;li&gt;Open an Internet Explorer window and browse to the IP address of the reader. &lt;/li&gt;

&lt;li&gt;Log in with the username and password (defaults are username &lt;strong&gt;admin &lt;/strong&gt;and password &lt;strong&gt;change&lt;/strong&gt;). &lt;/li&gt;

&lt;li&gt;From the Reader Administration Console, click on &lt;strong&gt;Query.&lt;/strong&gt; &lt;/li&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_35.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_15.png" width="644" height="420" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;An alternate method of querying the visible tags is by browsing to the URL &lt;a href="http://[ip"&gt;http://[ip&lt;/a&gt; address of device]/cgi-bin/dataProxy?oper=queryTags:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_37.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_16.png" width="644" height="235" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Updating the Device Firmware&lt;/h2&gt;

&lt;p&gt;Updating the device firmware on the XR series readers can be a little tricky the first time, due to the need to set up a FTP server to host the firmware update files.&amp;#160; However, once that server is in place and functional, performing the updates becomes a fairly trivial process.&lt;/p&gt;

&lt;h3&gt;Installing a FTP Server (Windows Server 2003)&lt;/h3&gt;

&lt;p&gt;The FTP server functionality included in IIS is the easiest method for enabling native firmware updates.&amp;#160; To install IIS with the FTP server extensions:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Click on &lt;strong&gt;Start&lt;/strong&gt;, &lt;strong&gt;Control Panel&lt;/strong&gt;, &lt;strong&gt;Add/Remove Programs &lt;/strong&gt;to bring up the Add or Remove Programs dialog.&lt;/li&gt;

  &lt;li&gt;Click on &lt;strong&gt;Add/Remove Windows Components&lt;/strong&gt;.&lt;/li&gt;

  &lt;li&gt;From the Windows Components Wizard, click on &lt;strong&gt;Application Server&lt;/strong&gt;, then click the &lt;strong&gt;Details &lt;/strong&gt;button (IIS will already have been installed as part of the BizTalk RFID installation).&amp;#160; &lt;/li&gt;

  &lt;li&gt;From the &lt;strong&gt;Application Server &lt;/strong&gt;dialog, click &lt;strong&gt;Internet Information Services (IIS)&lt;/strong&gt;, then click the &lt;strong&gt;Details &lt;/strong&gt;button.&lt;/li&gt;

  &lt;li&gt;From the &lt;strong&gt;Internet Information Services (IIS) &lt;/strong&gt;dialog, ensure that the &lt;strong&gt;File Transfer Protocol (FTP) Service &lt;/strong&gt;is checked, then click &lt;strong&gt;OK &lt;/strong&gt;until you return to the &lt;strong&gt;Windows Components Wizard&lt;/strong&gt; dialog.&lt;/li&gt;

  &lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt; to update the computer’s configuration, then Finish to close the wizard.&lt;/li&gt;

  &lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_25.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_10.png" width="635" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;Configuring the FTP Server (Windows Server 2003)&lt;/h3&gt;

&lt;p&gt;Once the FTP Server has been installed, we need to create an FTP site with the appropriate security settings and firmware files.&amp;#160; For the purposes of this article, we’ll use the default FTP site that’s created when the FTP service is installed.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;From the IIS Manager, right-click &lt;strong&gt;Default FTP Site&lt;/strong&gt; (under &lt;strong&gt;FTP Sites&lt;/strong&gt;), then click on &lt;strong&gt;Properties&lt;/strong&gt;.&lt;/li&gt;

  &lt;li&gt;From the &lt;strong&gt;Default FTP Site Properties &lt;/strong&gt;dialog, click on the &lt;strong&gt;Security Accounts &lt;/strong&gt;tab.&amp;#160; Ensure that &lt;strong&gt;Allow anonymous connections &lt;/strong&gt;is checked.&amp;#160; Note: to configure the service with user accounts for extra security, refer to &lt;a title="http://msdn.microsoft.com/en-us/library/6ws081sa.aspx" href="http://msdn.microsoft.com/en-us/library/6ws081sa.aspx"&gt;http://msdn.microsoft.com/en-us/library/6ws081sa.aspx&lt;/a&gt;.&lt;/li&gt;

  &lt;li&gt;Click on the &lt;strong&gt;Home Directory &lt;/strong&gt;tab.&amp;#160; This should display the FTP site directory as being &lt;em&gt;C:\inetpub\ftproot&lt;/em&gt;.&amp;#160; We’ll add the appropriate Motorola firmware update files under this directory.&lt;/li&gt;

  &lt;li&gt;Create the directory &lt;strong&gt;C:\inetpub\ftproot\Moto&lt;/strong&gt;.&lt;/li&gt;

  &lt;li&gt;Download one of the XR Software releases from the Motorola &lt;a href="http://support.symbol.com/support/browse.do?WidgetName=BROWSE_PRODUCT&amp;amp;IsRootNode=true&amp;amp;param_document=sp&amp;amp;TaxoName=SG_SupportGoals&amp;amp;BROWSE_PRODUCT.isProductTaxonomy=true&amp;amp;BROWSE_PRODUCT.NodeId=SG_XR450_1_2&amp;amp;BROWSE_PRODUCT.thisPageUrl=%2Fproduct%2Fproducts.do&amp;amp;id=m4&amp;amp;BROWSE_PRODUCT.TaxoName=SG_SupportGoals&amp;amp;NodeType=leaf&amp;amp;NodeName=XR450&amp;amp;document=DT_PRODUCTMANUALS_1_1&amp;amp;BROWSE_PRODUCT.NodeType=leaf&amp;amp;NodeId=SG_XR450_1_2&amp;amp;AppContext=AC_ProductPage&amp;amp;param_document=sp"&gt;web site&lt;/a&gt; for the XR450, such as version &lt;a href="http://support.symbol.com/support/search.do?cmd=displayKC&amp;amp;docType=kc&amp;amp;externalId=11996&amp;amp;sliceId=&amp;amp;dialogID=111696032&amp;amp;stateId=0 0 11468756"&gt;3.3.10&lt;/a&gt;.&amp;#160; Download and unzip this package into the directory &lt;em&gt;c:\inetpub\ftproot\Moto\3.3.10\&lt;/em&gt;.&amp;#160; This directory should resemble the image below.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_27.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_11.png" width="644" height="402" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;To create a firewall exclusion for the FTP service, execute the following firewall rule (opens port 21)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;font size="2" face="Consolas"&gt;netsh firewall add portopening TCP 21 &amp;quot;FTP Server&amp;quot;&lt;/font&gt;&lt;/p&gt;

&lt;h2&gt;Testing the FTP Server &lt;/h2&gt;

&lt;p&gt;From a different machine on the network (NOT the FTP Server itself!), connect to the FTP server to ensure that the Motorola firmware update files can be accessed.&amp;#160; The easiest way to do this is via Internet Explorer, using the ftp URL syntax.&amp;#160; From the Internet Explorer address bar enter the URI &lt;a href="ftp://[IP"&gt;ftp://[IP&lt;/a&gt; address of server]/Moto/3.3.10/.&amp;#160; If you have configured everything properly, you should see a directory listing similar to:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_29.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_12.png" width="592" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;Performing the Update&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;From the reader’s web management console, click on &lt;strong&gt;Maintenance&lt;/strong&gt;, then &lt;strong&gt;Version &lt;/strong&gt;to bring up the &lt;strong&gt;Version Control &lt;/strong&gt;panel.&lt;/li&gt;

  &lt;li&gt;In the FTP server text box type in the full FTP URL to the firmware files (i.e. &lt;a href="ftp://[ip"&gt;ftp://[ip&lt;/a&gt; address]/Moto/3.3.10/&lt;/li&gt;

  &lt;li&gt;For the username enter &lt;em&gt;Anonymous&lt;/em&gt;.&lt;/li&gt;

  &lt;li&gt;For the password enter &lt;em&gt;ftp@&lt;/em&gt;.&lt;/li&gt;

  &lt;li&gt;Click on &lt;strong&gt;Start Update &lt;/strong&gt;to start the firmware update.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_31.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_13.png" width="512" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The reader will then start the process of retrieving and installing the firmware update, which you may observe from the web console.&amp;#160; This process usually takes about 5 minutes, so go grab a coffee or either suitably caffeinated beverage.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_33.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1MotorolaXR450andBizTalkRFIDHandsOn_D2DB/image_thumb_14.png" width="644" height="478" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9808926" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/masimms/archive/tags/Biztalk+RFID/default.aspx">Biztalk RFID</category><category domain="http://blogs.msdn.com/masimms/archive/tags/RFID+Hardware/default.aspx">RFID Hardware</category></item><item><title>(Part 2) – Impinj Speedway and BizTalk RFID: Hands On</title><link>http://blogs.msdn.com/masimms/archive/2009/06/23/part-2-impinj-speedway-and-biztalk-rfid-hands-on.aspx</link><pubDate>Wed, 24 Jun 2009 01:24:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9800336</guid><dc:creator>masimms</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/masimms/comments/9800336.aspx</comments><wfw:commentRss>http://blogs.msdn.com/masimms/commentrss.aspx?PostID=9800336</wfw:commentRss><description>&lt;p&gt;Building on the steps in the previous post, we’ll use BizTalk RFID to connect to the Impinj Speedway. This post assumes that you've gone through the steps in part 1.&lt;/p&gt;  &lt;h3&gt;Connectivity and configuration with Biztalk RFID&lt;/h3&gt;  &lt;p&gt;Now the part we've all been waiting for - firing up Biztalk RFID, and using it in conjunction with the Impinj reader to do cool stuff.&amp;#160; As the Speedway supports LLRP (low-level reader protocol, a standard for communication between RFID readers and middleware such as BizTalk RFID), no additional provider is required – BizTalk RFID 2009 ships an LLRP provider out of the box (note; if you’re using BizTalk RFID 2006 R2, you’ll need to download and install the Standards Pack). &lt;/p&gt;  &lt;h2&gt;Adding the Reader&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;From the RFID Manager, right click the &lt;strong&gt;Devices &lt;/strong&gt;node, and click on &lt;strong&gt;New Device&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Introduction)&amp;#160; &lt;/strong&gt;dialog, ensure that the &lt;strong&gt;Add single device radio &lt;/strong&gt;button is selected, and click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Provider) &lt;/strong&gt;dialog, click on &lt;strong&gt;LLRP &lt;/strong&gt;in the list of available providers and click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Connection) &lt;/strong&gt;dialog, type the IP address of the device into the &lt;strong&gt;Name or IP address &lt;/strong&gt;textbox, and type in &lt;strong&gt;5084&lt;/strong&gt;as the value for the &lt;strong&gt;Port&lt;/strong&gt;.&amp;#160; &lt;u&gt;Note that the standard port for LLRP is 5084.&lt;/u&gt;&amp;#160; Click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Add Device to a Group) &lt;/strong&gt;dialog, select any device group (or the root device group) and click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Authentication) &lt;/strong&gt;dialog, type in &lt;strong&gt;root &lt;/strong&gt;for the username, and &lt;strong&gt;impinj &lt;/strong&gt;for the password (the default factory values).&amp;#160; Click &lt;strong&gt;Next &lt;/strong&gt;to start connecting to the device.&amp;#160; This will take several seconds, so don't get too impatient. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Checking for Tag Reads&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Place a tag in the read field of the antenna (in this case, somewhere close any of the connected antennae). &lt;/li&gt;    &lt;li&gt;From the RFID Manager, click the &lt;strong&gt;Devices &lt;/strong&gt;node.&amp;#160; &lt;/li&gt;    &lt;li&gt;Right click on the new device you have just added, and click &lt;strong&gt;View Tags&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2ImpinjSpeedwayandBizTalkRFIDHandsOn_D807/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2ImpinjSpeedwayandBizTalkRFIDHandsOn_D807/image_thumb.png" width="539" height="623" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Almost there!&amp;#160; Now that we are successfully communicating with the Speedway reader and receiving tag notifications, we need to bind the device into an RFID process to persist tag events into a database, and then build a report.&lt;/p&gt;  &lt;h3&gt;Building a BizTalk RFID process and capturing tag reads &lt;/h3&gt;  &lt;p&gt;Now for the fun part - capturing the stream of information from the Speedway reader, and making it consumable by a user.&amp;#160; In this section, I'll create a basic RFID process using the SqlSink event handler.&lt;/p&gt;  &lt;h4&gt;Creating a Biztalk RFID Process&lt;/h4&gt;  &lt;p&gt;The first step in capturing the information from the RFID reader will be to define an RFID process, bind in that reader, and use an event handler to route information to a SQL database.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the RFID Manager, right click the &lt;strong&gt;Processes &lt;/strong&gt;node, and click on &lt;strong&gt;New Process&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the New Process Dialog      &lt;ul&gt;       &lt;li&gt;Type in &lt;strong&gt;SampleProcess &lt;/strong&gt;as the &lt;strong&gt;Process name&lt;/strong&gt;. &lt;/li&gt;        &lt;li&gt;Select &lt;strong&gt;Reliable &lt;/strong&gt;as the &lt;strong&gt;Tag processing mode&lt;/strong&gt;. &lt;/li&gt;        &lt;li&gt;Leave the description blank. &lt;/li&gt;        &lt;li&gt;Ensure the &lt;strong&gt;Start Bind Wizard &lt;/strong&gt;box is checked. &lt;/li&gt;        &lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb23_2.png"&gt;&lt;img border="0" alt="image_thumb23" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb23_thumb.png" width="244" height="166" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the &lt;strong&gt;Bind Wizard (Welcome to the Bind Wizard) &lt;/strong&gt;dialog, click Next. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Bind Wizard (Bind Process to Logical Devices) &lt;/strong&gt;dialog, we'll create a logical device.&amp;#160; Logical devices are used to create associations between event sources (like devices and antenna) and logical or physical constructs (like portals or doorways).&amp;#160; In this case, our system will pretend that the Speedway is located at a loading dock, door A. &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;New&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Logical Device Name &lt;/strong&gt;dialog, type in &lt;strong&gt;Dock Door A &lt;/strong&gt;and click &lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Back in the &lt;strong&gt;Bind Wizard (Bind Process to Logical Devices) &lt;/strong&gt;dialog, click on the checkbox for &lt;strong&gt;Dock Door A&lt;/strong&gt;.&amp;#160; If you don't click on the checkbox, the option to bind physical devices to the logical device will not be available. &lt;/li&gt;    &lt;li&gt;In the &lt;strong&gt;Bind Wizard (Configure logical device - Dock Door A)&amp;#160; &lt;/strong&gt;dialog, expand the &lt;strong&gt;Speedway &lt;/strong&gt;entry to expose the list of sources (4, for the four antenna supported by the Speedway).&amp;#160; &lt;/li&gt;    &lt;li&gt;Click on the checkbox next to the Speedway reader to bind all events from the device to this logical device.&amp;#160; Note that this also creates &amp;quot;soft links&amp;quot; to all antenna of the reader. &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2ImpinjSpeedwayandBizTalkRFIDHandsOn_D807/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2ImpinjSpeedwayandBizTalkRFIDHandsOn_D807/image_thumb_2.png" width="722" height="548" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the &lt;strong&gt;Bind Wizard (Configure Components) &lt;/strong&gt;dialog, click &lt;strong&gt;New Component&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Click on the &lt;strong&gt;SqlServerSink &lt;/strong&gt;component, then click &lt;strong&gt;Add&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb35_2.png"&gt;&lt;img border="0" alt="image_thumb35" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb35_thumb.png" width="244" height="180" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Type in &lt;strong&gt;SqlSink &lt;/strong&gt;as the Instance name and click &lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb38_2.png"&gt;&lt;img border="0" alt="image_thumb38" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb38_thumb.png" width="244" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Click &lt;strong&gt;Close &lt;/strong&gt;to finish adding components. &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Ensure that the &lt;strong&gt;Start the process when I click Finish &lt;/strong&gt;box is checked, then click &lt;strong&gt;Finish&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the RFID Manager, you should be able to see the process running. &lt;/li&gt;    &lt;li&gt;Right click on the process name and click &lt;strong&gt;View Tags&lt;/strong&gt;.&amp;#160; By default the page is on a Manual refresh, so click the &lt;strong&gt;Refresh &lt;/strong&gt;button.&amp;#160; If you don't see any tags in the window, it's time to troubleshoot!&amp;#160; Happily, troubleshooting is covered in the next installment of this series. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2ImpinjSpeedwayandBizTalkRFIDHandsOn_D807/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2ImpinjSpeedwayandBizTalkRFIDHandsOn_D807/image_thumb_3.png" width="658" height="475" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Now that we've confirmed tags can be read in the process, the last step before building out a reporting interface will to confirm that the event handler (the SqlSink) is processing the tags correctly.&amp;#160; Start up the &lt;strong&gt;SQL Server Management Studio&lt;/strong&gt;, and connect to the RFIDSINK database. &lt;/li&gt;    &lt;li&gt;From the list of tables in the RFIDSINK database, dump the contents of the dbo.TagEvents table.&amp;#160; The tag reads should now be visible in the database. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_4.png"&gt;&lt;img border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb_1.png" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;In this posting, we walked through using BizTalk RFID to communicate with the Impinj Speedway and flow tag information into a database.&amp;#160; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9800336" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/masimms/archive/tags/Biztalk+RFID/default.aspx">Biztalk RFID</category><category domain="http://blogs.msdn.com/masimms/archive/tags/RFID+Hardware/default.aspx">RFID Hardware</category></item><item><title>(Part 1) – Impinj Speedway and BizTalk RFID: Hands On</title><link>http://blogs.msdn.com/masimms/archive/2009/06/23/part-1-impinj-speedway-and-biztalk-rfid-hands-on.aspx</link><pubDate>Wed, 24 Jun 2009 01:22:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9800335</guid><dc:creator>masimms</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/masimms/comments/9800335.aspx</comments><wfw:commentRss>http://blogs.msdn.com/masimms/commentrss.aspx?PostID=9800335</wfw:commentRss><description>&lt;p&gt;As the next (much delayed) post in a hands-on series, I’m going to walk through the process of creating an end to end solution with BizTalk RFID and the Impinj Speedway reader.&amp;#160; The primary steps covered are:&lt;/p&gt;  &lt;li&gt;Setting up the reader (from the shipping box to the network) &lt;/li&gt;  &lt;li&gt;Performing native firmware updates &lt;/li&gt;  &lt;li&gt;Connectivity and configuration with Biztalk RFID &lt;/li&gt;  &lt;li&gt;Building a basic business logic and reporting interface    &lt;h3&gt;Setting up the reader (from the shipping box to the network)&lt;/h3&gt;    &lt;p&gt;Every RFID reader is a little different in terms of power, network and antenna, so being familiar with the specifics of the readers you employ in your solutions is vitally important.&amp;#160; While Biztalk RFID does an excellent job of abstracting away many of the software and management related details, all the software in the world won't help if you can't turn the reader on! :)&lt;/p&gt;    &lt;p&gt;From the &lt;a href="http://www.impinj.com/products/rfid-reader.aspx?ekmensel=c580fa7b_215_0_2917_3"&gt;Impinj web site&lt;/a&gt;:&lt;/p&gt;    &lt;h4&gt;All Purpose, High Performance Tag Reading&lt;/h4&gt;    &lt;p&gt;&lt;img alt="" src="http://www.impinj.com/uploadedImages/Images/Products/Speedway_logo_white_200px_21px.gif" width="200" height="21" /&gt;&lt;/p&gt;    &lt;p&gt;The Speedway reader provides superior system performance in all RFID environments, especially when paired with &lt;a href="http://www.impinj.com/WorkArea/linkit.aspx?LinkIdentifier=id&amp;amp;ItemID=3087"&gt;Impinj reader antennas&lt;/a&gt; and &lt;a href="http://www.impinj.com/WorkArea/linkit.aspx?LinkIdentifier=id&amp;amp;ItemID=2865"&gt;Monza tag chips&lt;/a&gt;.       &lt;br /&gt;&lt;img title="speedway reader" border="0" alt="speedway reader" src="http://www.impinj.com/uploadedImages/images/sub-right-rfid-reader.jpg" /&gt;&lt;/p&gt;    &lt;p&gt;Some of the key features include: &lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Monostatic antenna arrangement (1 antenna per read point) &lt;/li&gt;      &lt;li&gt;Directional sensing capability—using standard UHF Gen 2 tags &lt;/li&gt;      &lt;li&gt;An &lt;a href="http://www.llrp.org/#LLRP"&gt;LLRP&lt;/a&gt; standard network interface (using the Octane 3.0 version of reader firmware) &lt;/li&gt;   &lt;/ul&gt;    &lt;h2&gt;Obtaining Documentation&lt;/h2&gt;    &lt;p&gt;The key document for working with the Speedway Reader is the &lt;strong&gt;&lt;a href="http://www.impinj.com/WorkArea/showcontent.aspx?id=3055"&gt;Octane 3.2 User Guide (IPJ-R1000)&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;    &lt;h4&gt;Connecting the Serial Connection&lt;/h4&gt;    &lt;p&gt;When setting up a reader for the first time, or performing low-level debugging a serial connection is invaluable.&amp;#160; If your PC or laptop does not have a built-in serial port, I would highly recommend purchasing a USB-to-serial adapter such as &lt;a href="http://sewelldirect.com/usbtoserial.asp"&gt;this one&lt;/a&gt;.&amp;#160;&amp;#160; Note that most big-box retailers or computer stores will carry a similar product in stock.&amp;#160; In addition to the physical connection, you'll need a terminal adapter program.&amp;#160; Note that since Hyperterminal is not a part of Windows Vista, you likely don't have a built-in one available.&amp;#160; I like a number of different (freeware) products, such as &lt;a href="http://www.ayera.com/teraterm/"&gt;TeraTerm Pro&lt;/a&gt;.&amp;#160; After downloading and installing Tera Term Pro, start the application.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_4.png"&gt;&lt;img border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_1.png" width="244" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Select the appropriate COM port (if using a USB-to-serial converter see the manufacturer documentation for details), and click &lt;strong&gt;OK&lt;/strong&gt;.&amp;#160; Built-in COM ports are usually COM1.&amp;#160; Click on &lt;strong&gt;Setup&lt;/strong&gt;, then &lt;strong&gt;Serial port &lt;/strong&gt;to configure the serial port settings.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_6.png"&gt;&lt;img border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_2.png" width="389" height="227" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;The serial communication settings for the Impinj Speedway are 115200 8N1 (or, 115200 baud rate, 8 bit data, none parity, 1 bit stop, none flow control).&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_8.png"&gt;&lt;img border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_3.png" width="244" height="217" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;h2&gt;Powering the Reader&lt;/h2&gt;    &lt;p&gt;If we can’t successfully power the reader, this is going to be a very short blog post.&amp;#160; The Speedway readers use a 24 VDC @ 2.5 A transformer “brick” with an industrial connector that securely fastens to the Speedway reader.&amp;#160; As of the time this article was written, the adapter is a &lt;em&gt;CUI Inc Switching Adapter&lt;/em&gt;.&amp;#160; &lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;Connect an Ethernet cable between an available network hub, and the 10/100 Base-T port on the Speedway reader. &lt;/li&gt;      &lt;li&gt;Connect a serial cable between the SERIAL port (not the GPIO port) on the Speedway Reader and your computer’s serial port. &lt;/li&gt;      &lt;li&gt;Connect an antenna to one of the available antenna ports (ANT1 – ANT4). &lt;/li&gt;      &lt;li&gt;Plug one end of the transformer into an available power outlet, and the other into the +24 VDC port on the Speedway reader. &lt;/li&gt;   &lt;/ol&gt;    &lt;p&gt;After powering the reader, the bootup information similar to the following should stream over the serial port:&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;kPOST        &lt;br /&gt;/         &lt;br /&gt;Complete+         &lt;br /&gt;Detected: 48F4400P0VT0 (0-B,1-T) Flash         &lt;br /&gt;OTP Version: 2         &lt;br /&gt;Serial Number: 370 08 08 0176         &lt;br /&gt;Hardware Revision: 030-02.0001         &lt;br /&gt;Impinj Powered RFID Reader Rev: E&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;…&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="consolas"&gt;DHCPDISCOVER on ixp0 to 255.255.255.255 port 67 interval 4        &lt;br /&gt;DHCPOFFER from 157.56.24.1         &lt;br /&gt;DHCPREQUEST on ixp0 to 255.255.255.255 port 67         &lt;br /&gt;DHCPACK from 157.56.24.1         &lt;br /&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;bound to 157.56.26.220 -- renewal in 6736 seconds.&lt;/font&gt;&lt;/strong&gt;         &lt;br /&gt;done.         &lt;br /&gt;mDNSResponder (Engineering Build) (Feb 25 2008 15:57:02) [498]: starting         &lt;br /&gt;Starting Apple Darwin Multicast DNS / DNS Service Discovery daemon: mdnsd.         &lt;br /&gt;Starting system log daemon: syslogd.         &lt;br /&gt;ntpdate -u -b -s         &lt;br /&gt;Starting NTP server: ntpd.         &lt;br /&gt;Cleaning: /tmp /var/lock /var/run.         &lt;br /&gt;Upgrade Agent Version: $Id: upgrade_agent v3.0.1 Built on: Mon Feb 25 15:56:55 2         &lt;br /&gt;008 $         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Starting OpenBSD Secure Shell server: sshd. &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="consolas"&gt;Speedway-One login:        &lt;br /&gt;Version: $Id: modem_ctrl v3.0.1 Built on: Mon Feb 25 15:55:50 2008 $&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;If the reader is configured to use DHCP to obtain an IP address, a DHCP status message like the one highlighted in red above should be visible.&amp;#160; If not, you’ll need to log into the machine to either obtain the static IP address or configure the reader to use DHCP.&lt;/p&gt;    &lt;p&gt;Note: Impinj readers support a very useful and handy discovery feature, that is also supported by Biztalk RFID.&amp;#160; The intent of this article is to demonstrate an “always works” technique for cases wherein discovery doesn’t work.&lt;/p&gt;    &lt;h2&gt;Using the Serial Interface&lt;/h2&gt;    &lt;p&gt;The Speedway readers all support a rich serial/telnet interface that allows configuration of virtually all aspects of the device.&amp;#160; While all of these features are accessible through Biztalk RFID, it's vital in troubleshooting scenarios to be able to isolate portions of the system (from the power supply on up), which is why I'm talking about them in this article.&amp;#160; All of the Speedway commands are documented in their &lt;strong&gt;&lt;a href="http://www.impinj.com/WorkArea/showcontent.aspx?id=3055"&gt;Octane 3.2 User Guide (IPJ-R1000)&lt;/a&gt;&lt;/strong&gt;, but a couple of useful commands are shown below.&amp;#160; Note: Octane refers to the Speedway’s firmware.&lt;/p&gt;    &lt;p&gt;To log into the device via the serial console (or a telnet session), hit &amp;lt;Enter&amp;gt; to bring up the login prompt, and enter the default username (&lt;strong&gt;root&lt;/strong&gt;) and password (&lt;strong&gt;impinj&lt;/strong&gt;).&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;Version: $Id: modem_ctrl v3.0.1 Built on: Mon Feb 25 15:55:50 2008 $ &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="2" face="Consolas"&gt;Speedway-One login: root        &lt;br /&gt;Password:         &lt;br /&gt;&amp;gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;Once logged into the device, you may use the following commands:&lt;/p&gt;    &lt;table border="0" cellspacing="0" cellpadding="2" width="440"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="200"&gt;Command&lt;/td&gt;          &lt;td valign="top" width="238"&gt;Process&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;Displaying the current network configuration (results are for a reader with DHCP enabled)&lt;/td&gt;          &lt;td valign="top" width="238"&gt;           &lt;p&gt;&lt;font size="2" face="Consolas"&gt;&amp;gt; show network summary                &lt;br /&gt;Status=0,'Success'                 &lt;br /&gt;ipAddressMode=dynamic                 &lt;br /&gt;ipAddress=10.10.26.220                 &lt;br /&gt;ipMask=255.255.255.0                 &lt;br /&gt;gatewayAddress=10.10.26.1                 &lt;br /&gt;broadcastAddress=10.10.26.255                 &lt;br /&gt;hostname=Speedway-One                 &lt;br /&gt;llaStatus=enabled&lt;/font&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;Configuring the device to use DHCP&lt;/td&gt;          &lt;td valign="top" width="238"&gt;           &lt;p&gt;&amp;#160;&lt;font size="2" face="Consolas"&gt;&amp;gt; config network ip dynamic                &lt;br /&gt;Status=0,'Success'&lt;/font&gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;Configuring the device to use a static IP address (in this case IP = 10.10.10.100, gateway address is 10.10.10.1).&lt;/td&gt;          &lt;td valign="top" width="238"&gt;&lt;font size="2" face="consolas"&gt;&amp;gt; config network static 10.10.10.100 10.10.10.1&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;Rebooting the reader&lt;/td&gt;          &lt;td valign="top" width="238"&gt;&lt;font size="2" face="Consolas"&gt;&amp;gt; reboot              &lt;br /&gt;Status=0,'Success'&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="200"&gt;Set the reader back to factory defaults.&lt;/td&gt;          &lt;td valign="top" width="238"&gt;&lt;font size="2" face="Consolas"&gt;&amp;gt; config image factory              &lt;br /&gt;&amp;gt; reboot&lt;/font&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;h2&gt;&amp;#160;&lt;/h2&gt;    &lt;h2&gt;Scanning Tags&lt;/h2&gt;    &lt;p&gt;I always recommend checking for tag scans with the lowest number of moving parts (i.e. if tag reads aren't showing up in a report there are many potential sources of failure - tag, antenna, reader, network, middleware, database and the report itself).&amp;#160; To scan tags using the “native” interface to the reader:&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;Open an Internet Explorer window and browse to the IP address of the reader. &lt;/li&gt;      &lt;li&gt;Log in with the username and password (defaults are username &lt;strong&gt;root &lt;/strong&gt;and password &lt;strong&gt;impinj&lt;/strong&gt;). &lt;/li&gt;      &lt;li&gt;In the navigation bar at the top of the screen, click on the RFIDemo tab (note: you will need Java installed on your machine). &lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/image_thumb_1.png" width="244" height="116" /&gt;&lt;/a&gt;         &lt;br /&gt;&lt;/li&gt;      &lt;li&gt;Click on Operation, then Start.&amp;#160; Wave some tags in front of any connected antennae. &lt;/li&gt;   &lt;/ol&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/image_thumb_3.png" width="644" height="315" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;h2&gt;Performing Native Firmware Updates&lt;/h2&gt;    &lt;p&gt;Occasionally it may be necessary to perform firmware updates using the vendor native interface.&amp;#160; A specific example of this is a reader which has a version of firmware which is not supported by the vendor's Biztalk RFID provider (usually in the case of older firmware versions).&amp;#160; If Biztalk RFID can't connect to the reader, it's not in a good position to perform firmware updates :). Firmware updates are available from the Impinj web site, but you first need to register as a customer &lt;a href="http://www.impinj.com/support/sales-force-login-request.aspx"&gt;here&lt;/a&gt;.&amp;#160; There's a manual approval process involved, so it's good to register as a partner as soon as you order your Impinj equipment (though approval usually only takes a day or two).&lt;/p&gt;    &lt;p&gt;From the support portal, browse to &lt;strong&gt;Content&lt;/strong&gt;, then search in &lt;strong&gt;Reader &amp;amp; Reader Antenna&lt;/strong&gt;.&amp;#160; In the list of available content should be files such as Speedway_Octane_3_2_1_Fw, containing the Speedway firmware.&amp;#160; Download this file to your computer, and extract it contents into an available directory.&amp;#160; The firmware file should have a .upg extension.&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;Open an Internet Explorer window and browse to the IP address of the reader. &lt;/li&gt;      &lt;li&gt;Log in with the username and password (defaults are username &lt;strong&gt;root &lt;/strong&gt;and password &lt;strong&gt;impinj&lt;/strong&gt;). &lt;/li&gt;      &lt;li&gt;Browse to the &lt;strong&gt;Configuration &lt;/strong&gt;screen, then &lt;strong&gt;Firmware&lt;/strong&gt;. &lt;/li&gt;      &lt;li&gt;In the &lt;strong&gt;Image File &lt;/strong&gt;section, click on the &lt;strong&gt;Browse &lt;/strong&gt;button to select the .upg file, then &lt;strong&gt;Apply &lt;/strong&gt;to upgrade the device’s firmware. &lt;/li&gt;   &lt;/ol&gt;    &lt;p&gt;As the firmware update proceeds, the Upgrade Status box will refresh.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/load_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="load" border="0" alt="load" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/load_thumb.jpg" width="717" height="196" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/image_thumb_2.png" width="244" height="131" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/erase_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="erase" border="0" alt="erase" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/erase_thumb.jpg" width="167" height="133" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part1ImpinjSpeedwayandBizTalkRFIDHandsOn_B0D5/image_thumb_4.png" width="244" height="84" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;After the firmware image is updated, you will need to manually reboot the reader in order for the update to take effect.&amp;#160; Click the reboot button at the bottom of the screen (under the Firmware Upgrade box).&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/li&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9800335" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/masimms/archive/tags/Biztalk+RFID/default.aspx">Biztalk RFID</category><category domain="http://blogs.msdn.com/masimms/archive/tags/RFID+Hardware/default.aspx">RFID Hardware</category></item><item><title>PowerShell and BizTalk RFID (1) - Providers and Server Configuration</title><link>http://blogs.msdn.com/masimms/archive/2009/03/17/powershell-and-biztalk-rfid-1-providers-and-server-configuration.aspx</link><pubDate>Wed, 18 Mar 2009 00:48:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9484904</guid><dc:creator>masimms</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/masimms/comments/9484904.aspx</comments><wfw:commentRss>http://blogs.msdn.com/masimms/commentrss.aspx?PostID=9484904</wfw:commentRss><description>&lt;style type="text/css" media="screen"&gt;

























.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;p&gt;Been on the road pretty much non-stop since January, so I haven't had the opportunity to post as much as I'd like.&amp;#160; However, it looks like the next couple of months will be a little more reasonable in terms of the travel schedule, so I should be able to clear out a bit of the backlog of strange and interesting posts about RFID, BizTalk Server, and other bits of Microsoft technology. &lt;/p&gt;  &lt;p&gt;I've always been a scripting guy, going back almost 15 years to being a pretty hard core UNIX sysadmin.&amp;#160; Cut my teeth on perl4, and every manner of shell scripting under the sun (as well as some that should never have seen the light of day).&amp;#160; Although I no longer have much (any) claim to vi wizardry (I'll keep my Visual Studio thank you very much) one of the aspects of the *NIX environment that I'd always missed was a rich scripting and automation interface.&amp;#160; With the release of PowerShell, the Windows platform has an amazing scripting environment that combines much of the magic of other scripting hosts, as well as some truly unique features leveraging the .NET platform.&lt;/p&gt;  &lt;p&gt;If you've never been exposed to PowerShell before, I highly recommend checking out the following:&lt;/p&gt;  &lt;p&gt;When deploying and managing (troubleshooting!) BizTalk RFID installations, there is often the need to automate certain tasks.&amp;#160; BizTalk RFID ships with a command line utility (rfidclientconsole.exe), but this isn't well suited to adhoc tasks and quick scripting, as it relies heavily on the use of parameter passing via complicated XML files.&amp;#160; Happily, PowerShell is very well suited to wrapping up .NET API's and making them consumable with rich parameters and aggregation.&lt;/p&gt;  &lt;p&gt;The intent is to publish a series of blog posts on using PowerShell and RFID, and gradually build up a library of cmdlets that can be used to administer BizTalk RFID installations.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-a23b3437f30df8de.skydrive.live.com/self.aspx/.Public/BizTalk%20RFID%20Samples/RfidFactotum.Rfid.PowerShell.zip"&gt;Source Code Package here&lt;/a&gt;.&lt;/p&gt;  &lt;h1&gt;Providers and Server Configuration Cmdlets&lt;/h1&gt;  &lt;p&gt;In this first post we'll pick off some low-hanging fruit - the ability to get information about providers and server configuration, then create some code to perform a basic sysadmin task - changing the log level of a provider or process component programatically.&amp;#160; Following the usual PowerShell naming conventions, we will create the following cmdlets (mimicking functionality of the rfidclientconsole application, only with a rich parameter experience):&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="547" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="169"&gt;Cmdlet Name&lt;/td&gt;        &lt;td valign="top" width="144"&gt;Rfid Client Console equivalent&lt;/td&gt;        &lt;td valign="top" width="232"&gt;Description&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="169"&gt;Get-RfidProviderStatus&lt;/td&gt;        &lt;td valign="top" width="148"&gt;GetAllProviderStatus          &lt;br /&gt;GetProviderStatus&lt;/td&gt;        &lt;td valign="top" width="230"&gt;Retrieve the list of registered providers and their current status.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="168"&gt;Get-RfidProviderProperties&lt;/td&gt;        &lt;td valign="top" width="151"&gt;GetProviderMetadata          &lt;br /&gt;GetProviderProperties&lt;/td&gt;        &lt;td valign="top" width="228"&gt;Retrieve the list of properties for a given set of providers.&amp;#160; &lt;br /&gt;          &lt;br /&gt;Note that unlike the rfidclientconsole version, this will return all properties (by default the GetProviderProperties() API call only returns non-default values).&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="168"&gt;Get-RfidProviderMetadata&lt;/td&gt;        &lt;td valign="top" width="153"&gt;GetProviderMetadata&lt;/td&gt;        &lt;td valign="top" width="227"&gt;Retrieve the set of provider metadata for a given set of providers (metadata describes the available properties of the provider).&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="167"&gt;Get-RfidServerConfig&lt;/td&gt;        &lt;td valign="top" width="155"&gt;GetServerConfiguration&lt;/td&gt;        &lt;td valign="top" width="226"&gt;Retrieve the current server configuration.&amp;#160; This includes both the bootstrap (i.e. startup / initialization) and runtime parameters.          &lt;br /&gt;          &lt;br /&gt;Note that the logging level for a component is an aspect of the server configuration - not of the component.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="167"&gt;Set-RfidLoggingLevel&lt;/td&gt;        &lt;td valign="top" width="156"&gt;NONE&lt;/td&gt;        &lt;td valign="top" width="226"&gt;Set the logging level for a given component(s).&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h1&gt;&amp;#160;&lt;/h1&gt;  &lt;h1&gt;Creating PowerShell Cmdlets&lt;/h1&gt;  &lt;p&gt;To get started on creating PowerShell cmdlets, read the following excellent blog posts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;David Aiken's &lt;a href="http://blogs.msdn.com/daiken/archive/2007/02/07/creating-a-windows-powershell-cmdlet-using-the-visual-studio-windows-powershell-templates.aspx"&gt;Creating a Windows PowerShell CmdLet using the Visual Studio Windows PowerShell Templates&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Mike Stall's &lt;a href="http://blogs.msdn.com/jmstall/archive/2007/03/04/debugging-cmdlets.aspx"&gt;Debugging PowerShell cmdlets in the VS IDE&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The samples in the rest of this post will use the PowerShell templates and debugging techniques from these posts.&amp;#160; To get started:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Install David's project wizard from &lt;a href="http://channel9.msdn.com/Photos/ZippedFiles/256835_PSTemplates.zip"&gt;http://channel9.msdn.com/Photos/ZippedFiles/256835_PSTemplates.zip&lt;/a&gt;.&amp;#160; &lt;/li&gt;    &lt;li&gt;Create a new Windows PowerShell project called BizTalkRFID.PowerShell.&amp;#160; Make sure that the project is set to use .NET 3.5. &lt;/li&gt;    &lt;li&gt;Configure the project for auto-registering and debugging the cmdlet as per Mike Stall's post. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;NOTE: If you are running on a 64-bit system, you need to GAC the output assembly with both the 32-bit and 64-bit versions of installutil.exe.&amp;#160; Do that with a post-build event command lineof:&lt;/p&gt;  &lt;pre&gt;c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\installutil.exe $(TargetDir)$(TargetFileName) 
c:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\installutil.exe $(TargetDir)$(TargetFileName)&lt;/pre&gt;

&lt;h1&gt;Get-RfidProviderStatus&lt;/h1&gt;

&lt;p&gt;We'll start with a fairly simple cmdlet - retrieving the status of a set of providers, leveraging the GetProviderStatus() API call.&amp;#160; The cmdlet should be able to take in the name (or names of a set) of a provider as well as a target server.&amp;#160; The signature of the cmdlet will be:&lt;/p&gt;

&lt;p&gt;Get-RfidProviderStatus [Provider Names] [-Server servername]&lt;/p&gt;

&lt;p&gt;1. Start off by adding a new Cmdlet to the project, under &lt;strong&gt;Add&lt;/strong&gt;, &lt;strong&gt;New Item&lt;/strong&gt;, &lt;strong&gt;Windows PowerShell&lt;/strong&gt;, &lt;strong&gt;Windows PowerShell Cmdlet&lt;/strong&gt;.&amp;#160; Name it &lt;em&gt;GetRfidProviderStatusCmdlet.cs&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;2. Add the following references to the project, from the &lt;strong&gt;C:\Program Files\Microsoft Biztalk RFID\bin\&lt;/strong&gt; directory.&lt;/p&gt;

&lt;pre&gt;Microsoft.Rfid.Client.dll
Microsoft.Rfid.Design.dll
Microsoft.Rfid.ManagementWebServices.dll
Microsoft.Rfid.SpiSdk.dll&lt;/pre&gt;

&lt;p&gt;3. Add the following using statements to the top of the class file:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.SensorServices.Rfid.Runtime;
&lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.SensorServices.Rfid.Management;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;4. Change the class &lt;em&gt;Cmdlet &lt;/em&gt;attribute to reflect the desired name of the cmdlet.&amp;#160; Note that since this cmdlet does not have any impact on the system (i.e. doesn't change anything), we can set the SupportsShouldProcess value to false.&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;Cmdlet&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;VerbsCommon&lt;/span&gt;.Get, &lt;span style="color: #a31515"&gt;&amp;quot;RfidProviderStatus&amp;quot;&lt;/span&gt;, SupportsShouldProcess = &lt;span style="color: blue"&gt;false&lt;/span&gt;)]
    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GetRfidProviderCmdlet &lt;/span&gt;: &lt;span style="color: #2b91af"&gt;Cmdlet
    &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;4. Define the parameters, as per the following code.&amp;#160; This will define two parameters, ProviderName (an array of strings to represent the provider name), and Server (a single string to represent the target BizTalk RFID server). &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Parameter(Position = 0,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    Mandatory = &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    ValueFromPipelineByPropertyName = &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    HelpMessage = &lt;span class="str"&gt;&amp;quot;The name (or names) of the target providers&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;[ValidateNotNullOrEmpty]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;[Alias(&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] ProviderName&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    get;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    set; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;}&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;[Parameter(Position = 1,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    Mandatory = &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    ValueFromPipelineByPropertyName = &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    HelpMessage = &lt;span class="str"&gt;&amp;quot;The name (or names) of the target BizTalk RFID server&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;[ValidateNotNullOrEmpty]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Server&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    get;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    set;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;5. Override the BeginProcessing method to create initialization code which will create the ProviderManagerProxy object pointing to the appropriate server. &lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; ProviderManagerProxy provProxy;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BeginProcessing()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Server))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        provProxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProviderManagerProxy();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        provProxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProviderManagerProxy(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Server);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;6. Now the meat of the whole cmdlet development exercise - actually reaching out to the BizTalk RFID server and retrieving the provider status information.&amp;#160; Create an override for the ProcessRecord method, as per: &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessRecord()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (ProviderName == &lt;span class="kwrd"&gt;null&lt;/span&gt; || ProviderName.Length == 0)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            WriteVerbose(&lt;span class="str"&gt;&amp;quot;Retrieving status for all providers&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            WriteVerbose(&lt;span class="str"&gt;&amp;quot;Retrieving status for providers &amp;quot;&lt;/span&gt; + String.Join(&lt;span class="str"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;, ProviderName));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        ProviderStatus[] provStatus = provProxy.GetProviderStatus(ProviderName);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        WriteObject(provStatus, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (RfidClientException ex0)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        ApplicationException ex_app = &lt;span class="kwrd"&gt;new&lt;/span&gt; ApplicationException(ex0.RemoteErrorMessage, ex0);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        WriteError(&lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorRecord(ex_app, ex0.RemoteErrorCode, ErrorCategory.InvalidOperation, ProviderName));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex1)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        ThrowTerminatingError(&lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorRecord(ex1, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, ErrorCategory.InvalidResult, ProviderName));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;}        &lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;This entire method boils down to two lines (10 and 11) - the rest is diagnostics and error handling.&amp;#160; Note that we have to catch the RfidClientException and wrap the RemoteErrorMessage, otherwise the only feedback to the user is &amp;quot;Remote method failed&amp;quot; - an instance of absolutely correct and singularly useless feedback.&lt;/p&gt;

&lt;p&gt;7. Now that the cmdlet has been created (sans documentation - we'll get to that in a minute), it's time to see the fruits of our labours.&amp;#160; This cmdlet is executed against a base install of BizTalk RFID 2009 with the LLRP provider registered.&amp;#160; Press F5 to start a debuggable instance of PowerShell, and dump out the basic provider information: &lt;/p&gt;

&lt;p&gt;
  &lt;table border="1"&gt;&lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;pre&gt;PS C:\files\BizTalkRFID.PowerShell\bin\Debug&amp;gt; Get-RfidProviderStatus


Name           : LLRP
ProviderFaults : {}
LastFaultType  : None
LastFaultTime  : 1/1/0001 12:00:00 AM
ProviderState  : Registered&lt;/pre&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;
&lt;/p&gt;

&lt;p&gt;Exciting stuff, eh? :).&amp;#160; The real &amp;quot;wow&amp;quot; factor here isn't being able to dump out this basic list - could do that with rfidclientconsole.&amp;#160; The exciting part is now this information can leverage all of the power and utility of PowerShell scripting to do things, build reports, drive automation, etc.&amp;#160; Expanding the idea a bit:&lt;/p&gt;

&lt;p&gt;
  &lt;table border="1"&gt;&lt;tbody&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;pre&gt;PS C:\Files&amp;gt; Get-RfidProviderStatus | format-table Name,ProviderState -autosize

Name ProviderState
---- -------------
LLRP    Registered&lt;/pre&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;
&lt;/p&gt;

&lt;p&gt;Creating a simple table of available and registered providers.&lt;/p&gt;

&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;PS C:\Files&amp;gt; Get-RfidProviderStatus | where-object { $_.ProviderState &lt;span class="preproc"&gt;-eq&lt;/span&gt; &lt;span class="str"&gt;'Regis&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;tered'&lt;/span&gt; }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;Name           : LLRP&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;ProviderFaults : {}&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;LastFaultType  : None&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;LastFaultTime  : 1/1/0001 12:00:00 AM&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;ProviderState  : Registered&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now we're starting to do fun things - with this command we filtered out registered provider names.&amp;#160; Further on in this series when we create cmdlets such as Start-RfidProvider, we could write simple scripts that automatically started all Registered providers with something as simple as&lt;/p&gt;

&lt;p&gt;Get-RfidProviderStatus | ? {$_.ProviderState -eq 'Registered' } | Select-Object Name | Start-RfidProvider&lt;/p&gt;

&lt;h1&gt;Get-RfidProviderMetadata&lt;/h1&gt;

&lt;p&gt;The next cmdlet will be retrieving the metadata from a provider, or set of providers.&amp;#160; This cmdlet is nearly identical to the previous, the only difference being the cmdlet name, Cmdlet() attribute definition, and implementation of ProcessRecord.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;  [Cmdlet(VerbsCommon.Get, &lt;span class="str"&gt;&amp;quot;RfidProviderMetadata&amp;quot;&lt;/span&gt;, SupportsShouldProcess = &lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MyCmdlet1 : Cmdlet&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;...&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessRecord()&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; name &lt;span class="kwrd"&gt;in&lt;/span&gt; ProviderName)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    {                &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            WriteVerbose(&lt;span class="str"&gt;&amp;quot;Retrieving provider metadata..&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            ProviderMetadata meta = provProxy.GetProviderMetadata(name);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            WriteObject(meta);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (RfidClientException ex0)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            ApplicationException ex_app = &lt;span class="kwrd"&gt;new&lt;/span&gt; ApplicationException(ex0.RemoteErrorMessage, ex0);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            WriteError(&lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorRecord(ex_app, ex0.RemoteErrorCode, ErrorCategory.InvalidOperation, name));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex1)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            ThrowTerminatingError(&lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorRecord(ex1, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, ErrorCategory.InvalidResult, name));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Compile and run the updated project. From the PowerShell window you should now be able to execute the Get-RfidProviderMetadata cmdlet, as per:&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;ug&amp;gt; Get-RfidProviderMetadata LLRP -verbose
VERBOSE: Retrieving provider metadata..


ProviderInformation            : &amp;lt;providerInformation&amp;gt;&amp;lt;id&amp;gt;Microsoft BizTalk RFI
                                 D LLRP Provider&amp;lt;/id&amp;gt;&amp;lt;description&amp;gt;Provider for
                                 LLRP devices&amp;lt;/description&amp;gt;&amp;lt;version&amp;gt;3.7.0.0&amp;lt;/ve
                                 rsion&amp;gt;&amp;lt;/providerInformation&amp;gt;
ProviderCapabilities           : {The provider supports TCP/IP transport., The
                                 provider supports raising a defunct event., Th
                                 e provider supports device discovery., The pro
                                 vider supports triggering of device discovery.
                                 }
ProviderPropertyMetadata       : {[Connection:Port], [General:LLRP Version], [M
                                 anagement:LLRP Message timeout], [Management:T
                                 CP KeepAlive Time]...}
VendorExtensionsEntityMetadata : {[HoppingEvent:DSPI management event], [Reader
                                 ExceptionEvent:DSPI management event], [RFSurv
                                 eyEvent:DSPI management event], [ConnectionAtt
                                 emptEvent:DSPI management event]...}
DevicePropertyMetadata         : {[LLRP General Capabilities:Antenna Sensitivit
                                 y Maximum Index], [LLRP General Capabilities:A
                                 ntenna Sensitivity Minimum Index], [LLRP Gener
                                 al Capabilities:Can Set Antenna Properties], [
                                 LLRP General Capabilities:Has UTC Clock Capabi
                                 lity]...}&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Not very exciting, either.&amp;#160; Or is it?&amp;#160; Remember that PowerShell uses the default formater defined by the underlying .NET type - in this case output as XML.&amp;#160; Those aren't text strings, but fully fledged objects that can be manipulated.&amp;#160; Like this:&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;PS C:\Files&amp;gt; $meta = Get-RfidProviderMetadata LLRP
PS C:\Files&amp;gt; $meta.ProviderCapabilities


Value              : 4
Description        : The provider supports TCP/IP transport.
IsDiscoveryRelated : False
IsEventRelated     : False
IsTransportRelated : True

Value              : 3
Description        : The provider supports raising a defunct event.
IsDiscoveryRelated : False
IsEventRelated     : True
IsTransportRelated : False

Value              : 1
Description        : The provider supports device discovery.
IsDiscoveryRelated : True
IsEventRelated     : False
IsTransportRelated : False

Value              : 2
Description        : The provider supports triggering of device discovery.
IsDiscoveryRelated : True
IsEventRelated     : False
IsTransportRelated : False&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Displaying the list of capabilities for the LLRP provider.&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;PS C:\Files&amp;gt; $meta.DevicePropertyMetadata.Keys | sort GroupName

GroupName                               PropertyName
---------                               ------------
General                                 Regulatory region
General                                 Name
General                                 Firmware version
General                                 Vendor...&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Listing out the provider properties (full list truncated for space reasons).&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;PS C:\Files&amp;gt; $meta.DevicePropertyMetadata.Keys | sort GroupName | format-table -autosize | select-object -first 10

GroupName                               PropertyName
---------                               ------------
General                                 Regulatory region
General                                 Name
General                                 Firmware version
General                                 Vendor
LLRP Access Report Spec                 Trigger
LLRP Antenna Configuration              Receiver Sensitivity Index
LLRP Antenna Configuration              Transmit Power Index
LLRP Antenna Configuration              Hop Table Id&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Listing the first 10 provider properties, sorted by GroupName, with automatic sizing in the table formatting.&lt;/p&gt;

&lt;h1&gt;Get-RfidProviderProperties&lt;/h1&gt;

&lt;p&gt;Now to dig a little deeper into provider properties.&amp;#160; The GetProviderProperties() method of the ProviderManagerProxy() returns the non-default (i.e. changed) values from the provider.&amp;#160; The GetProviderMetadata() returns the metadata for said properties, including the defaults.&amp;#160; Useful information, but in two separate buckets.&amp;#160; Let's write a cmdlet that returns a unified view of the properties using a custom PSObject (i.e. leveraging PowerShell's awesome adaptive type system).&lt;/p&gt;

&lt;p&gt;1. This cmdlet is nearly identical to the previous, the only difference being the cmdlet name, Cmdlet() attribute definition, and implementation of ProcessRecord.&amp;#160; The definition of the class and Cmdlet attribute is:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt; [Cmdlet(VerbsCommon.Get, &lt;span class="str"&gt;&amp;quot;RfidProviderProperty&amp;quot;&lt;/span&gt;, SupportsShouldProcess = &lt;span class="kwrd"&gt;true&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; GetRfidProviderPropertiesCmdlet : Cmdlet&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;2. The implementation of ProcessRecord is a little trickier, and requires some explanation.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessRecord()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; name &lt;span class="kwrd"&gt;in&lt;/span&gt; ProviderName)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            WriteVerbose(&lt;span class="str"&gt;&amp;quot;Retrieving provider metadata..&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            ProviderMetadata meta = provProxy.GetProviderMetadata(name);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            WriteVerbose(&lt;span class="str"&gt;&amp;quot;Retrieving provider properties..&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            PropertyProfile prof = provProxy.GetProperties(name);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (PropertyKey k &lt;span class="kwrd"&gt;in&lt;/span&gt; meta.ProviderPropertyMetadata.Keys)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                PSObject obj = &lt;span class="kwrd"&gt;new&lt;/span&gt; PSObject(meta.ProviderPropertyMetadata[k]);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                obj.Properties.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; PSNoteProperty(&lt;span class="str"&gt;&amp;quot;Group&amp;quot;&lt;/span&gt;, k.GroupName));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                obj.Properties.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; PSNoteProperty(&lt;span class="str"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, k.PropertyName));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                &lt;span class="rem"&gt;// Modified value&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (prof.Keys.Contains(k))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                    PSNoteProperty n = &lt;span class="kwrd"&gt;new&lt;/span&gt; PSNoteProperty(&lt;span class="str"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;, prof[k]);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                    obj.Properties.Add(n);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                    PSNoteProperty o = &lt;span class="kwrd"&gt;new&lt;/span&gt; PSNoteProperty(&lt;span class="str"&gt;&amp;quot;Default&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                    obj.Properties.Add(o);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                &lt;span class="rem"&gt;// Default value&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                    PSNoteProperty n = &lt;span class="kwrd"&gt;new&lt;/span&gt; PSNoteProperty(&lt;span class="str"&gt;&amp;quot;Value&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                        meta.ProviderPropertyMetadata[k].DefaultValue);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                    obj.Properties.Add(n);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                    PSNoteProperty o = &lt;span class="kwrd"&gt;new&lt;/span&gt; PSNoteProperty(&lt;span class="str"&gt;&amp;quot;Default&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                    obj.Properties.Add(o);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                }                        &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                WriteObject(obj);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (RfidClientException ex0)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            ApplicationException ex_app = &lt;span class="kwrd"&gt;new&lt;/span&gt; ApplicationException(ex0.RemoteErrorMessage, ex0);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            WriteError(&lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorRecord(ex_app, ex0.RemoteErrorCode, ErrorCategory.InvalidOperation, name));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex1)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            ThrowTerminatingError(&lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorRecord(ex1, &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, ErrorCategory.InvalidResult, name));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Line 3 - Since we can receive multiple provider names, we'll iterate over each.&lt;/p&gt;

&lt;p&gt;Line 7-11: In order to aggregate the property information, we need to retrieve both the metadata and property profile.&lt;/p&gt;

&lt;p&gt;Line 13: As the metadata has the &amp;quot;master&amp;quot; list of all properties, we use this as the baseline for enumeration.&lt;/p&gt;

&lt;p&gt;Line 15-17: Here is the PowerShell magic.&amp;#160; We're going to create a PowerShell object (PSObject) that wraps the native metadata object, and decorate it with some note properties.&amp;#160; In this case the GroupName and the property name.&lt;/p&gt;

&lt;p&gt;Line 19-25: If the property profile contains the value, then it's a non-default value.&amp;#160; We add two note properties, one with the modified value, the other with a flag indicating its non-default status.&lt;/p&gt;

&lt;p&gt;Line 30-35: If the property profile does not contain the value, then it's a default value, which we grab from the metadata.&amp;#160; We add two note properties, one with the modified value, the other with a flag indicating its default status.&lt;/p&gt;

&lt;p&gt;Line 40-47: The usual error handling.&lt;/p&gt;

&lt;p&gt;With this simple bit of code we can now do some interesting automation (well, for now we can play with data - once the Set-RfidProviderProperty cmdlets are written in future posts we can have more fun).&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;ug&amp;gt; Get-RfidProviderProperty LLRP | format-table

Group   Name      Value Default IsInitO Type    Descrip LowerRa HigherR ValueEx
                                    nly         tion        nge    ange pressio
                                                                        n
-----   ----      ----- ------- ------- ----    ------- ------- ------- -------
Conn... Port       5084    True    True Syst... Prov...       1   65535
General LLRP...   1.0.1    True   False Syst... Indi... ...+308 ...+308
Mana... LLRP...   45000    True   False Syst... Time...   10000 ...3647
Mana... TCP ...   60000    True   False Syst... Time...   30000 ...3647
Conn... Devi...      60    True    True Syst... Inte...       1 ...3647
Disc... Matc...      10    True   False Syst... Indi...       1 ...3647&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Retrieving all of the provider properties and their current values.&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;ug&amp;gt; Get-RfidProviderProperty Contoso | format-table Name,Value,Default -autosize

Name             Value                                  Default
----             -----                                  -------
Init_NonEditable Rfid                                      True
Name             Contoso                                   True
Description      Sample Microsoft BizTalk RFID Provider    True
DevelopedBy      Microsoft BizTalk RFID Team               True
Year Developed   2006                                      True
Integer_Editable 100                                       True
bool_Editable    True                                      True
DiscoveryPort    9876                                      True
HostDS           False                                     True
XML              False                                     True&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Having a look at the Contoso provider's properties.&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;PS C:\files\projects\Microsoft.Rfid.PowerShell\Microsoft.Rfid.PowerShell\bin\Debug&amp;gt; Get-RfidProviderProperty Contoso | ? {$_.Type.FullName -eq 'System.String' } | format-table Name,Value -autosize

Name             Value
----             -----
Init_NonEditable Rfid
Name             Contoso
Description      Sample Microsoft BizTalk RFID Provider
DevelopedBy      Microsoft BizTalk RFID Team&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Get a list of all of the string type properties.&lt;/p&gt;

&lt;h1&gt;Set-RfidLoggingLevel&lt;/h1&gt;

&lt;p&gt;Most of this article was written while trying to create this one cmdlet, for automating log level configuration.&amp;#160; This can be a somewhat non-intuitive exercise (or at least it was for me :), so a quick walkthrough of the steps involved may be useful.&amp;#160; The log level appears on the Initialization Parameters of the Properties page of a provider in the RFID Manager.&amp;#160; This may lead one to assume that the logging level is a property of the provider.&amp;#160; One would be flat out wrong :)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/PowerShellandBizTalkRFID1ProvidersandSer_A9C3/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="507" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/PowerShellandBizTalkRFID1ProvidersandSer_A9C3/image_thumb_2.png" width="659" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The logging level is an aspect of the RFID Server Configuration.&amp;#160; Let's use the rfidclientconsole to dump the server configuration and have a look:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;C:\&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;rfidclientconsole GetServerConfiguration test.xml&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;C:\&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;type test.xml&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-16&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RfidServerConfiguration&lt;/span&gt; &lt;span class="attr"&gt;xmlns:i&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.datacontract.org/2004/07/Microsoft.SensorServices.Rfid.Management&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;clusterNetworkName&lt;/span&gt; &lt;span class="attr"&gt;i:nil&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;rfidServerBootstrapConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;eventLoggingPolicyForExceptions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;logNonRfidServerExceptions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;true&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;logNonRfidServerExceptions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;minimumExceptionSeverityForLogging&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Fatal&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;minimumExceptionSeverityForLogging&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;eventLoggingPolicyForExceptions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;log&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;component&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;MSBizTalkRFID&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ProcessManager&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;DeviceManager&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Device&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;FixedTimerQ&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Common&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;SecurityManager&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ProviderManager&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ComponentManager&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ConnectorServices&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;RfidWebService&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Error&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;level&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Tracking&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComponentLogLevelType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;component&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dateTimeFormat&lt;/span&gt; &lt;span class="attr"&gt;i:nil&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;defaultLogLevel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Info&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;defaultLogLevel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;logFile&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;logs\RfidServices.log&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;logFile&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;log&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;rfidStore&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;connectionString&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Persist Security Info=False;database=RFIDSTORE;Integrated Security=SSPI; server=MASIMMS-DESKTOP&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;connectionString&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;rfidStore&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;wsConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;wSPort&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;0&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;wSPort&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;wSPortSpecified&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;wSPortSpecified&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;wsConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;rfidServerBootstrapConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;rfidServerRuntimeConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;deviceManagerConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;autoApplyNonPersistentProperties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;true&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;autoApplyNonPersistentProperties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;deviceCommandResponseTimeoutMilliseconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;180000&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;deviceCommandResponseTimeoutMilliseconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  79:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;deviceConnectionCheckTimeMilliseconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;60000&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;deviceConnectionCheckTimeMilliseconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;deviceConnectionFailedThreshold&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;10&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;deviceConnectionFailedThreshold&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  81:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;deviceConnectionRetryTimeMilliseconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;60000&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;deviceConnectionRetryTimeMilliseconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;maxTagPrintedEvent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;50&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;maxTagPrintedEvent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;stampNotificationEventWithID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;stampNotificationEventWithID&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;deviceManagerConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  85:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;exposeStackTrace&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;exposeStackTrace&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  86:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;hostingConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  87:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;iisHost&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;localhost&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;iisHost&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  88:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;iisPort&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;80&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;iisPort&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  89:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;iisTimeOutSeconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;60&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;iisTimeOutSeconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  90:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;iisWebsiteId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;iisWebsiteId&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  91:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;hostingConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  92:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;logConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  93:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;currentBackupIndex&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;0&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;currentBackupIndex&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  94:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;fileCheckFrequency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;25&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;fileCheckFrequency&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  95:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;fileCount&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;fileCount&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  96:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;fileSize&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;10&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;fileSize&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  97:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;maxAllowedDuplicates&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;3&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;maxAllowedDuplicates&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  98:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;spamControlTimePeriodInMinutes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;10&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;spamControlTimePeriodInMinutes&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  99:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;logConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 100:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;processManagerConfiguration&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 101:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;providerManagerConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 102:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;delegateThreadTimeoutMilliseconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;60000&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;delegateThreadTimeoutMilliseconds&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 103:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;providerSideBySideLoadAllowed&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;providerSideBySideLoadAllowed&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 104:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;providerManagerConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 105:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;wSConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 106:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;shouldAuditSuccess&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;false&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;shouldAuditSuccess&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 107:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;wSConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt; 108:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;rfidServerRuntimeConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 109:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;RfidServerConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Wow.&amp;#160; That's a lot of stuff.&amp;#160; The interesting items are the logging components.&amp;#160; These define the individual logging level for each component in the system, both internal system components and the &amp;quot;user&amp;quot; components such as providers and processes.&amp;#160; &lt;/p&gt;

&lt;p&gt;Note that the LLRP provider does NOT appear in this list.&amp;#160; This is due to the INHERIT LOG LEVEL checkbox being set in the RFID Manager.&amp;#160; If a user component is set to inherit a logging setting, it will not have an entry in the RFID Server Configuration data set.&amp;#160; This comes into play in our implementation of the Set-RfidLoggingLevel command.&lt;/p&gt;

&lt;p&gt;The ServerManagerProxy exposes a very chunky interface, meaning that we have to retrieve the RFID server configuration, make changes to that configuration, then dump the configuration back in order to effect any changes.&lt;/p&gt;

&lt;p&gt;1. This cmdlet is nearly identical to the previous, the only difference being the cmdlet name, Cmdlet() attribute definition, and implementation of ProcessRecord.&amp;#160; The definition of the class and Cmdlet attribute is:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt; [Cmdlet(VerbsCommon.Set, &lt;span class="str"&gt;&amp;quot;RfidLogLevel&amp;quot;&lt;/span&gt;, SupportsShouldProcess = &lt;span class="kwrd"&gt;true&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SetRfidLogLevelCmdlet : Cmdlet&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;2. The parameter set is a little different, consisting of the Log Level, followed by the component names with an optional Server parameter.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Parameter(Position = 0,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    Mandatory = &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    ValueFromPipelineByPropertyName = &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    HelpMessage = &lt;span class="str"&gt;&amp;quot;Logging Level&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;[ValidateNotNullOrEmpty]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; ConfigLogLevel Level&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    get;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    set; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;[Parameter(Position = 1,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;Mandatory = &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;ValueFromPipelineByPropertyName = &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;HelpMessage = &lt;span class="str"&gt;&amp;quot;The name (or names) of the target components (providers and processes&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;[ValidateNotNullOrEmpty]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;[Alias(&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] ComponentName&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    get;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    set;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;}&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;[Parameter(Position = 2,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    Mandatory = &lt;span class="kwrd"&gt;false&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    ValueFromPipelineByPropertyName = &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    HelpMessage = &lt;span class="str"&gt;&amp;quot;The name of the target BizTalk RFID server&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;[ValidateNotNullOrEmpty]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Server&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    get;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    set;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;3. The initialization code is also a little different.&amp;#160; In order to perform parameter validation we need to have the list of user components (providers and processes), and will thus need the proxy objects to access these in addition to the ServerManagerProxy.&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; ServerManagerProxy srvProxy;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; ProviderManagerProxy provProxy;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; ProcessManagerProxy procProxy;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BeginProcessing()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Server))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        srvProxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; ServerManagerProxy();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        provProxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProviderManagerProxy();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        procProxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProcessManagerProxy();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        srvProxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; ServerManagerProxy(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Server);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        provProxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProviderManagerProxy(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Server);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        procProxy = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProcessManagerProxy(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Server);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;4. Now the good stuff.&amp;#160; Actually implementing the changes.&amp;#160; &lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessRecord()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="rem"&gt;// Get the server configuration, which contains the logging level information in the&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="rem"&gt;// bootstrap (i.e. startup) settings&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        WriteVerbose(&lt;span class="str"&gt;&amp;quot;Retrieving server configuration&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        RfidServerConfiguration config = srvProxy.GetServerConfiguration();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="rem"&gt;// Get the list of provider and process names - these are the only valid components&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        WriteVerbose(&lt;span class="str"&gt;&amp;quot;Retrieving provider list&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        ProviderStatus[] provStatus = provProxy.GetProviderStatus(&lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; providerNames = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ProviderStatus s &lt;span class="kwrd"&gt;in&lt;/span&gt; provStatus)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            providerNames.Add(s.Name);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        WriteVerbose(&lt;span class="str"&gt;&amp;quot;Retrieving process list&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; procNames = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(procProxy.GetAllProcesses());&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="rem"&gt;// Perform parameter validation on the list of input components&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; validComponents = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; name &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.ComponentName)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (procNames.Contains(name) || providerNames.Contains(name))&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                WriteVerbose(&lt;span class="str"&gt;&amp;quot;Component &amp;quot;&lt;/span&gt; + name + &lt;span class="str"&gt;&amp;quot; is a valid logging component&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                validComponents.Add(name);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                WriteWarning(&lt;span class="str"&gt;&amp;quot;Component &amp;quot;&lt;/span&gt; + name + &lt;span class="str"&gt;&amp;quot; is not a process or provider name&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ComponentLogLevelType n &lt;span class="kwrd"&gt;in&lt;/span&gt; config.RfidServerBootstrapConfiguration.log.component)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (validComponents.Contains(n.name))&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                WriteVerbose(&lt;span class="str"&gt;&amp;quot;Changing log level of component &amp;quot;&lt;/span&gt; + n.name + &lt;span class="str"&gt;&amp;quot; to &amp;quot;&lt;/span&gt; + Level.ToString());&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                n.level = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Level;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                validComponents.Remove(n.name);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        &lt;span class="rem"&gt;// Check for &amp;quot;default&amp;quot; logging levels&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        List&amp;lt;ComponentLogLevelType&amp;gt; vals = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;ComponentLogLevelType&amp;gt;(&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                config.RfidServerBootstrapConfiguration.log.component);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; name &lt;span class="kwrd"&gt;in&lt;/span&gt; validComponents)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;            WriteVerbose(&lt;span class="str"&gt;&amp;quot;Setting log level of component &amp;quot;&lt;/span&gt; + name + &lt;span class="str"&gt;&amp;quot; to non-default value &amp;quot;&lt;/span&gt; + Level.ToString());&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;            ComponentLogLevelType t = &lt;span class="kwrd"&gt;new&lt;/span&gt; ComponentLogLevelType();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;            t.name = name;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;            t.level = Level;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;            vals.Add(t);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;        config.RfidServerBootstrapConfiguration.log.component = vals.ToArray();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;        WriteVerbose(&lt;span class="str"&gt;&amp;quot;Updating Server..&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;        srvProxy.SetServerConfiguration(config);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;        &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (RfidClientException ex0)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;        ApplicationException ex_app = &lt;span class="kwrd"&gt;new&lt;/span&gt; ApplicationException(ex0.RemoteErrorMessage, ex0);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;        ThrowTerminatingError(&lt;span class="kwrd"&gt;new&lt;/span&gt; ErrorRecord(ex_app, ex0.RemoteErrorCode, ErrorCategory.InvalidOperation, &lt;span class="kwrd"&gt;this&lt;/span&gt;.Server));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;}&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;adfasdfasdf &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;table cellspacing="0" cellpadding="2" width="551" border="0"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="73"&gt;Lines&lt;/td&gt;

      &lt;td valign="top" width="476"&gt;Description&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="75"&gt;7-8&lt;/td&gt;

      &lt;td valign="top" width="476"&gt;Retrieving the RFID Server Configuration, which contains the logging components.&amp;#160; See the XML dump above for the typical contents.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="75"&gt;11-18&lt;/td&gt;

      &lt;td valign="top" width="476"&gt;Retrieving the list of process and provider names, and making them available in List&amp;lt;&amp;gt; objects.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="75"&gt;21-33&lt;/td&gt;

      &lt;td valign="top" width="476"&gt;Filtering out any non-valid component names.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="75"&gt;35-43&lt;/td&gt;

      &lt;td valign="top" width="476"&gt;Non-inheriting log levels will be present in the server configuration.&amp;#160; Find the log level object for the component, and modify the log level.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="75"&gt;46-57&lt;/td&gt;

      &lt;td valign="top" width="476"&gt;Since inherited logging level don't have a record in the component list, we need to add any new values to a list, and then replace the list stored in the server configuration.&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="75"&gt;59-60&lt;/td&gt;

      &lt;td valign="top" width="476"&gt;Updating the server with the new configuration.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;All of this code (well, it's not a huge amount), but we get a very straightforward logging configuration experience:&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;ug&amp;gt; Set-RfidLogLevel Verbose LLRP -verbose
VERBOSE: Retrieving server configuration
VERBOSE: Retrieving provider list
VERBOSE: Retrieving process list
VERBOSE: Component LLRP is a valid logging component
VERBOSE: Changing log level of component LLRP to Verbose
VERBOSE: Updating Server..&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Once we have the opportunity to implement more of the Get-Rfid* cmdlets, this method can be used to do some interesting things.&amp;#160; However, since we already have a way to retrieve a list of the provider names:&lt;/p&gt;

&lt;table border="1"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;pre&gt;ug&amp;gt; Get-RfidProviderStatus | select-object Name | Set-RfidLogLevel Verbose -verbose
VERBOSE: Retrieving server configuration
VERBOSE: Retrieving provider list
VERBOSE: Retrieving process list
VERBOSE: Component LLRP is a valid logging component
VERBOSE: Changing log level of component LLRP to Verbose
VERBOSE: Updating Server..
VERBOSE: Retrieving server configuration
VERBOSE: Retrieving provider list
VERBOSE: Retrieving process list
VERBOSE: Component Contoso is a valid logging component
VERBOSE: Changing log level of component Contoso to Verbose
VERBOSE: Updating Server..&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;PowerShell script to set all of the Provider log levels to Verbose.&lt;/p&gt;

&lt;p&gt;Note: because of the use of ProcessRecord the log levels are being changed sequentially.&amp;#160; A more efficient way of doing it would be to aggregate the component names in ProcessRecord and actually update the server in EndProcessing.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9484904" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/masimms/archive/tags/Biztalk+RFID/default.aspx">Biztalk RFID</category><category domain="http://blogs.msdn.com/masimms/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Pro RFID with BizTalk Server 2009 - Hot Off the Presses</title><link>http://blogs.msdn.com/masimms/archive/2009/03/17/pro-rfid-with-biztalk-server-2009-hot-off-the-presses.aspx</link><pubDate>Wed, 18 Mar 2009 00:42:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9484882</guid><dc:creator>masimms</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/masimms/comments/9484882.aspx</comments><wfw:commentRss>http://blogs.msdn.com/masimms/commentrss.aspx?PostID=9484882</wfw:commentRss><description>&lt;p&gt;After a marathon writing binge over the past few months, the first book on BizTalk RFID has been published by &lt;a href="http://www.apress.com/book/view/9781430218371"&gt;Apress&lt;/a&gt;.&amp;#160; Written by myself, Ram Venkatesh (former Lead Architect on BizTalk RFID, now CEO of &lt;a href="http://www.s3edge.com/"&gt;S3 Edge&lt;/a&gt;), and Mark Beckner (prominent writer and consultant on BizTalk Server and EDI) it's packed full of BizTalk RFID goodness.&amp;#160; Available now for &lt;a href="http://www.amazon.com/Pro-RFID-BizTalk-Server-2009/dp/1430218371"&gt;order&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;Read &lt;a href="http://www.apress.com/book/downloadfile/4308"&gt;Chapter 1&lt;/a&gt;, or have a look through the table of contents:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Foreword &lt;/li&gt;    &lt;li&gt;About the Authors &lt;/li&gt;    &lt;li&gt;About the Technical Reviewer &lt;/li&gt;    &lt;li&gt;Acknowledgments &lt;/li&gt;    &lt;li&gt;Introduction &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 1 RFID Background Primer &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Tracking Stuff: Eyeballs and Lasers &lt;/li&gt;    &lt;li&gt;Introducing Radio Frequency Identification &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Navigating the Technology Matrix &lt;/li&gt;      &lt;li&gt;What&amp;#8217;s in a Tag? &lt;/li&gt;      &lt;li&gt;Active vs. Passive &lt;/li&gt;      &lt;li&gt;Passive Readers in Action &lt;/li&gt;      &lt;li&gt;Active RFID Technology &lt;/li&gt;      &lt;li&gt;Tag Memory: Reading and Writing &lt;/li&gt;      &lt;li&gt;Printers and Applicators &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Cutting Through the Hype &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;The Science of the Feasible vs. the Art of the Possible &lt;/li&gt;      &lt;li&gt;The Myth of the RFID Solution&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Electronic Product Code Class 1 Generation 2 &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Closed-Loop vs. Open-Loop Systems &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Applying RFID &lt;/li&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 2 BizTalk RFID Architecture and Installation &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;The BizTalk RFID Process Architecture &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;The Physical Layer &lt;/li&gt;      &lt;li&gt;The Device Layer &lt;/li&gt;      &lt;li&gt;The Device Provider Layer &lt;/li&gt;      &lt;li&gt;Application-Level Services&lt;/li&gt;      &lt;li&gt;LOB and Back-End Connectivity &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The BizTalk RFID Device Model &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Identity &lt;/li&gt;      &lt;li&gt;Endpoint &lt;/li&gt;      &lt;li&gt;Connection Initiation&lt;/li&gt;      &lt;li&gt;Authentication &lt;/li&gt;      &lt;li&gt;Discovery &lt;/li&gt;      &lt;li&gt;Knobs &lt;/li&gt;      &lt;li&gt;Management &lt;/li&gt;      &lt;li&gt;Sources &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The BizTalk RFID Device Model for Applications &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;The Device Model Assumed by DeviceConnection &lt;/li&gt;      &lt;li&gt;The Device Security Model &lt;/li&gt;      &lt;li&gt;The Concurrency Model for the DeviceConnection Class&lt;/li&gt;      &lt;li&gt;The RFID Business Process Device Model&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Installing BizTalk RFID &lt;/li&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 3 The RFID &amp;#8220;Hello World&amp;#8221; Application &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Overview &lt;/li&gt;    &lt;li&gt;Using the Device Simulator &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Configuring Settings &lt;/li&gt;      &lt;li&gt;Configuring Notifications &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Creating a Device in BizTalk RFID &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Creating a Process &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 4 Using RFID Manager &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Overview of RFID Manager &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Permissions &lt;/li&gt;      &lt;li&gt;Connecting to Servers &lt;/li&gt;      &lt;li&gt;Managing Server Properties &lt;/li&gt;      &lt;li&gt;RFID Manager Server Dashboard &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Managing Providers &lt;/li&gt;    &lt;li&gt;Managing Device Groups &lt;/li&gt;    &lt;li&gt;Managing Devices &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Importing and Exporting Devices &lt;/li&gt;      &lt;li&gt;Device Configuration &lt;/li&gt;      &lt;li&gt;Managing Device States &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Managing Processes &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Understanding Logical and Physical Devices &lt;/li&gt;      &lt;li&gt;Managing Components &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 5 Asynchronous Event Processing in BizTalk RFID &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;What Is a BizTalk RFID Process? &lt;/li&gt;    &lt;li&gt;Hands-On Exercises &lt;/li&gt;    &lt;li&gt;Event Processing Application Model &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Initialization &lt;/li&gt;      &lt;li&gt;Design-Time Support &lt;/li&gt;      &lt;li&gt;The Actual Event Handler Methods&lt;/li&gt;      &lt;li&gt;Tear-Down and Cleanup &lt;/li&gt;      &lt;li&gt;Deployment and Undeployment &lt;/li&gt;      &lt;li&gt;Strong Typing &lt;/li&gt;      &lt;li&gt;Error Handling &lt;/li&gt;      &lt;li&gt;Binding and Deployment &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Executing RFID Processes &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;RFID Process Runtime Architecture &lt;/li&gt;      &lt;li&gt;Activation and Hosting &lt;/li&gt;      &lt;li&gt;BizTalk RFID Hosting Model for Windows Server &lt;/li&gt;      &lt;li&gt;Transactionality&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 6 Command Processing &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Connecting BizTalk RFID to Your Application &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Processes &lt;/li&gt;      &lt;li&gt;Devices &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Device Management &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Implementing Synchronous Calls from .NET Applications &lt;/li&gt;      &lt;li&gt;Implementing Device Callbacks &lt;/li&gt;      &lt;li&gt;Managing Device Connections &lt;/li&gt;      &lt;li&gt;Standard Commands &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Vendor Commands &lt;/li&gt;    &lt;li&gt;Common Tasks &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Simulating Tag Reads &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 7 BizTalk RFID Mobile &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;BizTalk RFID Mobile Architecture &lt;/li&gt;    &lt;li&gt;Installing BizTalk RFID Mobile &lt;/li&gt;    &lt;li&gt;Creating a BizTalk RFID Mobile Application &lt;/li&gt;    &lt;li&gt;Asynchronous Event Notification &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Using Triggers to Control Asynchronous Notifications &lt;/li&gt;      &lt;li&gt;Scanning RFID Barcodes from your BizTalk RFID Mobile Application &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Integration with BizTalk RFID Server &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Remote Management Support &lt;/li&gt;      &lt;li&gt;Storing Events Locally in a SQL Server CE Database &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Tag Data Encoding and Translation &lt;/li&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 8 Integrating with BizTalk Server &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Publishing Events to BizTalk Server &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Publishing to BizTalk Server Using MSMQ&lt;/li&gt;      &lt;li&gt;Publishing to BizTalk Server Using SqlServerSink &lt;/li&gt;      &lt;li&gt;Extending the Flexibility of Event Retrieval &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Calling the BizTalk BRE &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Logging Using the BRE&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Calling a BizTalk RFID Web Service Proxy from an Orchestration &lt;/li&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 9 Direct Communication with Enterprise Applications &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Integrating with SQL Server Reporting Services &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Querying the BizTalk RFID Databases &lt;/li&gt;      &lt;li&gt;Writing the SQL Server Reporting Services Reports &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Connecting to BizTalk RFID via Remote Machines &lt;/li&gt;    &lt;li&gt;Integrating with SharePoint 2007 &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Developing the SharePoint Web Part Foundation &lt;/li&gt;      &lt;li&gt;Extending the Web Part to Use the RFID Web Service Proxies &lt;/li&gt;      &lt;li&gt;Extending the Web Part to Use a Custom Web Service &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 10 Diagnostics and Troubleshooting &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Setting the Stage: Tools and Techniques &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Introducing PowerShell &lt;/li&gt;      &lt;li&gt;Tailing a Log File&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Peeking Inside a BizTalk RFID Application &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;BizTalk RFID Server Log Files &lt;/li&gt;      &lt;li&gt;Provider Log Files &lt;/li&gt;      &lt;li&gt;Process Log Files (Event Handlers)&lt;/li&gt;      &lt;li&gt;WMI for RFID &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Troubleshooting BizTalk RFID &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;RFID Devices &lt;/li&gt;      &lt;li&gt;Tags and Objects &lt;/li&gt;      &lt;li&gt;Communication &lt;/li&gt;      &lt;li&gt;Service and Providers&lt;/li&gt;      &lt;li&gt;Logical Devices and Process Binding&lt;/li&gt;      &lt;li&gt;Event Handlers &lt;/li&gt;      &lt;li&gt;Sinks and External Applications &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CHAPTER 11 Enterprise Planning and Deployment &lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;From Development to Production &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Staging RFID Device Definitions and Device Properties &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Planning for Disaster Recovery &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;BizTalk RFID Footprint &lt;/li&gt;      &lt;li&gt;Enabling Cold Standby &lt;/li&gt;      &lt;li&gt;Running BizTalk RFID Under Microsoft Cluster Service &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Enterprise Deployment &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Servicing RFID Device Providers &lt;/li&gt;      &lt;li&gt;Servicing RFID Processes &lt;/li&gt;      &lt;li&gt;Changing Device Bindings for a Process &lt;/li&gt;      &lt;li&gt;Distributing and Upgrading Business Rules&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Enterprise Monitoring &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;RFID Management Pack for BizTalk RFID &lt;/li&gt;      &lt;li&gt;Device Versioning &lt;/li&gt;      &lt;li&gt;BizTalk RFID Service Discovery Through Active Directory &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conclusion &lt;/li&gt;    &lt;li&gt;CHAPTER 12 BizTalk RFID Recipes &lt;/li&gt;    &lt;li&gt;12.1. Transport Protocols Within Event Handlers &lt;/li&gt;    &lt;li&gt;12.2. RFID Data, XML, and SQL Server      &lt;br /&gt;12.3. Debugging Tips       &lt;br /&gt;12.4. Integration with BizTalk EDI Functionality       &lt;br /&gt;12.5. Creating an XSD Based on BizTalk RFID XML       &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9484882" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/masimms/archive/tags/Biztalk+RFID/default.aspx">Biztalk RFID</category></item><item><title>(Part 2) - Hands on with Biztalk RFID and the Alien 9650</title><link>http://blogs.msdn.com/masimms/archive/2008/12/15/part-2-hands-on-with-biztalk-rfid-and-the-alien-9650.aspx</link><pubDate>Mon, 15 Dec 2008 08:15:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9218159</guid><dc:creator>masimms</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/masimms/comments/9218159.aspx</comments><wfw:commentRss>http://blogs.msdn.com/masimms/commentrss.aspx?PostID=9218159</wfw:commentRss><description>&lt;p&gt;Building on the previous post, the next thing we'll do is use Biztalk RFID to connect to the Alien 9650.&amp;#160; This post assumes that you've gone through the steps in part 1.&lt;/p&gt;  &lt;h1&gt;Connectivity and configuration with Biztalk RFID&lt;/h1&gt;  &lt;p&gt;Now the part we've all been waiting for - firing up Biztalk RFID, and using it in conjunction with the Alien reader to do cool stuff.&amp;#160; This process (at least the first time) involves obtaining and installing the provider, configuring the appropriate firewall access on the host machine, and then adding the reader itself.&lt;/p&gt;  &lt;h2&gt;Obtaining and Installing the Provider&lt;/h2&gt;  &lt;p&gt;The provider is available from the partner site (another reason I recommend getting a partner login as soon as possible :).&amp;#160; In the partner site, under Technical Information -&amp;gt; Software, look for the &lt;strong&gt;Microsoft BizTalk RFID Provider for ALR-9900, 9800, 8800, 9650&lt;/strong&gt; link.&amp;#160; This leads to a zip package containing an installer.&amp;#160; Download the package and execute the installer.&amp;#160;&amp;#160; This will install the provider DLL under &lt;strong&gt;Program Files &lt;/strong&gt;at &lt;strong&gt;\Alien RFID\Alien RFID Provider&lt;/strong&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: the installer does not register the provider, so we'll need to take care of that in the next step.&lt;/p&gt;  &lt;p&gt;To register the provider (remember that multiple versions of the same provider can be simultaneously registered - great feature :):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Start the RFID Manager, and click on the &lt;strong&gt;Device Providers&lt;/strong&gt; node.&amp;#160; We'll go ahead and add the Alien which I downloaded from the partner site in the last step. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb11_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="image_thumb11" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb11_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Right click on &lt;strong&gt;Device Providers&lt;/strong&gt;, and click on &lt;strong&gt;New Provider&lt;/strong&gt;.&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;From the Add Provider dialog window type in Alien as the name. &lt;/li&gt;    &lt;li&gt;Click on Browse, and navigate to the Alien RFID Provider directory (under \Program Files\Alien RFID) and select the &lt;strong&gt;AlienRfidProvider.dll &lt;/strong&gt;file. &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;Register &lt;/strong&gt;to load the provider into Biztalk RFID. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb15_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image_thumb15" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb15_thumb.png" width="242" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As of the time I wrote this article, the Alien provider has a minor bug when running on Windows Vista with IPv6 enabled related to the &lt;strong&gt;Local Host &lt;/strong&gt;property.&amp;#160; This property is used by the provider to auto-configure the device's notification host.&amp;#160; The notification host is the destination to which the reader sends asynchronous events, such as &amp;quot;I saw tags&amp;quot;, or &amp;quot;my input port changed&amp;quot;.&amp;#160; If the provider does not have the correct value for this asynchronous events will never be received - i.e. RFID Processes in Biztalk RFID will never receive tags.&lt;/p&gt;  &lt;p&gt;To fix the problem get rid of the IPv6 &amp;quot;fluff&amp;quot; around the local address.&amp;#160; In the example the default host string is fe80::200:5efe:10.0.0.1%12.&amp;#160; Change that to 10.0.0.1 (the IPv4 address buried in the middle).&amp;#160; A quick review of the other configuration properties (which don't need to be changed for default scenarios, but good to be familiar with none the less) is listed in the next section.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ensure the &lt;strong&gt;Start the provider &lt;/strong&gt;box is checked, then click &lt;strong&gt;OK &lt;/strong&gt;to start the provider. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Snapshot of Vendor Properties&lt;/h2&gt;  &lt;table cellspacing="0" cellpadding="2" width="753" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Property Name&lt;/td&gt;        &lt;td valign="top" width="314"&gt;Vendor Description&lt;/td&gt;        &lt;td valign="top" width="74"&gt;Default Value&lt;/td&gt;        &lt;td valign="top" width="232"&gt;Comment&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Discovery Port &lt;/td&gt;        &lt;td valign="top" width="314"&gt;Decimal network port number used for discovery.&amp;#160;&amp;#160; Same port must be set as the HeartbeatPort vendor property at device evel          &lt;br /&gt;&lt;/td&gt;        &lt;td valign="top" width="74"&gt;3988&lt;/td&gt;        &lt;td valign="top" width="232"&gt;This port needs to be open on the local machine firewall for discovery to work.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Local Host&lt;/td&gt;        &lt;td valign="top" width="314"&gt;For network notifications: String of local host IP Address.&amp;#160; If not specified, the provider will use the first available local host IP Address. Same IPAddress must be set as the Notification Host property at device level.&lt;/td&gt;        &lt;td valign="top" width="74"&gt;Varies&lt;/td&gt;        &lt;td valign="top" width="232"&gt;As noted above, may need to remove the IPv6 formatting from the local host address.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Notification Port&lt;/td&gt;        &lt;td valign="top" width="314"&gt;Decimal network port number used for notifications. Should be different from the IO Events Port. Same port must be set as the Notification Port property at device level&lt;/td&gt;        &lt;td valign="top" width="74"&gt;7797&lt;/td&gt;        &lt;td valign="top" width="232"&gt;This port needs to be open on the local machine firewall for asynchronous notifications to be received.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;IO Events Port&lt;/td&gt;        &lt;td valign="top" width="314"&gt;Decimal network port number used for IO events. Should be different from the Notification Port.&amp;#160; Same port must be set as the IO Stream Port property at device level.&lt;/td&gt;        &lt;td valign="top" width="74"&gt;7799&lt;/td&gt;        &lt;td valign="top" width="232"&gt;This port needs to be open on the local machine firewall for I/O events to be received.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Tag Stream Port&lt;/td&gt;        &lt;td valign="top" width="314"&gt;Decimal network port number used for Tag Streaming. Should be different from the Notification and IO Events Ports.&amp;#160; Same port must be set as the TagStreamPort property at device level.&lt;/td&gt;        &lt;td valign="top" width="74"&gt;7798&lt;/td&gt;        &lt;td valign="top" width="232"&gt;This port needs to be open on the local machine for tag streaming mode to work.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Discovery Update Time&lt;/td&gt;        &lt;td valign="top" width="314"&gt;Time interval in seconds used for updating readers discovered over network.&lt;/td&gt;        &lt;td valign="top" width="74"&gt;10&lt;/td&gt;        &lt;td valign="top" width="232"&gt;No need to modify this value for most scenarios.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Log Reader Communications&lt;/td&gt;        &lt;td valign="top" width="314"&gt;If TRUE provider will log excessive reader communications to the 'Program Files\Alien RFID\AlienAPI*.log\' files for diagnostic purposes when investigating and fixing issues.&amp;#160; They should be deleted manually to free disk space.&lt;/td&gt;        &lt;td valign="top" width="74"&gt;False&lt;/td&gt;        &lt;td valign="top" width="232"&gt;Only set this value to true when performing diagnostics.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Use Tag Streaming&lt;/td&gt;        &lt;td valign="top" width="314"&gt;If TRUE provider will set the Alien Custom property TagStreamMode = ON on all connected readers for UNCONDITIONALLY reporting every single tag found.&amp;#160; &lt;br /&gt;          &lt;br /&gt;As a result the provider will send not only 'TagListEvents' caused by Event Mode but also separate 'TagReadEvents' for every single tag read (sometimes far too many.)           &lt;br /&gt;          &lt;br /&gt;Set this property to FALSE if you're going to use 'TagListEvents' only and/or reader's notifications with specifically configured Alien CUSTOM properties.&lt;/td&gt;        &lt;td valign="top" width="74"&gt;True&lt;/td&gt;        &lt;td valign="top" width="232"&gt;Depends on the type and shape of data that your application or scenario requires.&amp;#160; &lt;br /&gt;          &lt;br /&gt;Understand how the Alien reader's internal tag list and configuration properties work before changing this to FALSE.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Default Event Mode&lt;/td&gt;        &lt;td valign="top" width="314"&gt;If TRUE, provider will automatically set the Event Mode = true whenever establishing connection to device; otherwise client application will be responsible for configuring the Event Mode as a separate operation after device connection has been already established.          &lt;br /&gt;&lt;/td&gt;        &lt;td valign="top" width="74"&gt;True&lt;/td&gt;        &lt;td valign="top" width="232"&gt;Unless you're writing a manual / synchronous application that sets this property manually, leave this value as TRUE.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Auto-Save individual properties&lt;/td&gt;        &lt;td valign="top" width="314"&gt;If TRUE provider will automatically save to reader's flash memory all individual properties.&amp;#160; Otherwise, call to the Save command is required to make ALL properties persistent after setting them with the SetProperty command.&lt;/td&gt;        &lt;td valign="top" width="74"&gt;False&lt;/td&gt;        &lt;td valign="top" width="232"&gt;If using the Biztalk RFID interface to perform &amp;quot;permanent&amp;quot; configuration changes, set this value to TRUE.&amp;#160; &lt;br /&gt;          &lt;br /&gt;Otherwise changes will be discarded when the reader restarts.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Configuring Firewall Ports&lt;/h2&gt;  &lt;p&gt;As noted in the previous section certain inbound ports need to be opened in the firewall to enable asynchronous notification and discovery functionality.&amp;#160; The default ports 3988, 7797, 7798, and 7799 may be opened by executing the commands below.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;For Windows XP / Server 2003:&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;netsh firewall add portopening TCP 3988 &amp;#8220;Alien Discovery&amp;#8221;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;netsh firewall add portopening TCP 7797 &amp;#8220;Alien Notification&amp;#8221;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;netsh firewall add portopening TCP 7798 &amp;#8220;Alien IO&amp;#8221;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;netsh firewall add portopening TCP 7799 &amp;#8220;Alien Streaming&amp;#8221;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;u&gt;For Windows Vista / Server 2008:&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;netsh advfirewall firewall add rule name=&amp;#8221;AlienDiscovery&amp;#8221; dir=in action=allow protocol=TCP localport=3988&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;netsh advfirewall firewall add rule name=&amp;#8221;AlienNotification&amp;#8221; dir=in action=allow protocol=TCP localport=7797&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;netsh advfirewall firewall add rule name=&amp;#8221;AlienIO&amp;#8221; dir=in action=allow protocol=TCP localport=7798&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;netsh advfirewall firewall add rule name=&amp;#8221;AlienStreaming&amp;#8221; dir=in action=allow protocol=TCP localport=7799&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h2&gt;Adding the Reader&lt;/h2&gt;  &lt;p&gt;Seems like a lot of work just to connect to a reader and a get a few tags, doesn't it?&amp;#160; I went into a lot more detail for the prerequisites than was perhaps strictly necessary - however, knowing why certain things are done is crucial when you have to perform troubleshooting.&amp;#160; Not to mention the number of times that diagnostics have ended with staring at the end of an unplugged cable has taught me to start with the basics (power, connectivity, firmware, tags) before building up.&amp;#160; To add the reader:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the RFID Manager, right click the &lt;strong&gt;Devices &lt;/strong&gt;node, and click on &lt;strong&gt;New Device&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Introduction)&amp;#160; &lt;/strong&gt;dialog, ensure that the &lt;strong&gt;Add single device radio &lt;/strong&gt;button is selected, and click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Provider) &lt;/strong&gt;dialog, click on &lt;strong&gt;Alien &lt;/strong&gt;in the list of available providers and click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb19_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="204" alt="image_thumb19" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb19_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Connection) &lt;/strong&gt;dialog, type the IP address of the device into the &lt;strong&gt;Name or IP address &lt;/strong&gt;textbox, and type in &lt;strong&gt;23 &lt;/strong&gt;as the value for the &lt;strong&gt;Port&lt;/strong&gt;.&amp;#160; &lt;u&gt;Note that the Alien provider uses port 23 for connecting, not the web interface on port 80.&lt;/u&gt;&amp;#160; Click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Add Device to a Group) &lt;/strong&gt;dialog, select any device group (or the root device group) and click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Authentication) &lt;/strong&gt;dialog, type in &lt;strong&gt;alien &lt;/strong&gt;for the username, and &lt;strong&gt;password &lt;/strong&gt;for the password (the default factory values).&amp;#160; Click &lt;strong&gt;Next &lt;/strong&gt;to start connecting to the device.&amp;#160; This will take several seconds, so don't get too impatient. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you cannot connect to the device, and upon clicking View Error you receive the &lt;u&gt;Error 24 Invalid Format &lt;/u&gt;error your notification host value is set incorrectly at a provider level.&amp;#160; Go back to the provider properties and fix that value.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Properties) &lt;/strong&gt;dialog, click &lt;strong&gt;Next &lt;/strong&gt;to advance the final step without modifying any of the base device description properties, unless of course you really want to. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Add Device Wizard (Completion) &lt;/strong&gt;dialog, click &lt;strong&gt;Finish &lt;/strong&gt;to finish the process of adding the device. &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Checking for Tag Reads&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;Place a tag in the read field of the antenna (in this case, somewhere close to the built-in antenna). &lt;/li&gt;    &lt;li&gt;From the RFID Manager, click the &lt;strong&gt;Devices &lt;/strong&gt;node.&amp;#160; &lt;/li&gt;    &lt;li&gt;Right click on the new device you have just added, and click &lt;strong&gt;View Tags&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb21_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="228" alt="image_thumb21" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb21_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Almost there!&amp;#160; Now that we are successfully communicating with the Alien reader and receiving tag notifications, we need to bind the device into an RFID process to persist tag events into a database, and then build a report.&lt;/p&gt;  &lt;h1&gt;Building a BizTalk RFID process and capturing tag reads &lt;/h1&gt;  &lt;p&gt;Now for the fun part - capturing the stream of information from the Alien reader, and making it consumable by a user.&amp;#160; In this section, I'll create a basic RFID process using the SqlSink event handler, extend the table schema to associate tags with assets and generate a basic ASP.NET report from that database table.&lt;/p&gt;  &lt;h2&gt;Creating a Biztalk RFID Process&lt;/h2&gt;  &lt;p&gt;The first step in capturing the information from the RFID reader will be to define an RFID process, bind in that reader, and use an event handler to route information to a SQL database.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the RFID Manager, right click the &lt;strong&gt;Processes &lt;/strong&gt;node, and click on &lt;strong&gt;New Process&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the New Process Dialog      &lt;ul&gt;       &lt;li&gt;Type in &lt;strong&gt;SampleProcess &lt;/strong&gt;as the &lt;strong&gt;Process name&lt;/strong&gt;. &lt;/li&gt;        &lt;li&gt;Select &lt;strong&gt;Reliable &lt;/strong&gt;as the &lt;strong&gt;Tag processing mode&lt;/strong&gt;. &lt;/li&gt;        &lt;li&gt;Leave the description blank. &lt;/li&gt;        &lt;li&gt;Ensure the &lt;strong&gt;Start Bind Wizard &lt;/strong&gt;box is checked. &lt;/li&gt;        &lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb23_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="166" alt="image_thumb23" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb23_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the &lt;strong&gt;Bind Wizard (Welcome to the Bind Wizard) &lt;/strong&gt;dialog, click Next. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Bind Wizard (Bind Process to Logical Devices) &lt;/strong&gt;dialog, we'll create a logical device.&amp;#160; Logical devices are used to create associations between event sources (like devices and antenna) and logical or physical constructs (like portals or doorways).&amp;#160; In this case, our system will pretend that the ALR-9650 is located at a loading dock, door A. &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;New&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the &lt;strong&gt;Logical Device Name &lt;/strong&gt;dialog, type in &lt;strong&gt;Dock Door A &lt;/strong&gt;and click &lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Back in the &lt;strong&gt;Bind Wizard (Bind Process to Logical Devices) &lt;/strong&gt;dialog, click on the checkbox for &lt;strong&gt;Dock Door A&lt;/strong&gt;.&amp;#160; If you don't click on the checkbox, the option to bind physical devices to the logical device will not be available. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb27_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="196" alt="image_thumb27" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb27_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;In the &lt;strong&gt;Bind Wizard (Configure logical device - Dock Door A)&amp;#160; &lt;/strong&gt;dialog, expand the &lt;strong&gt;Alien RFID Reader &lt;/strong&gt;entry to expose the list of sources (2, for the two antenna supported by the ALR-9650).&amp;#160; Click on the checkbox next to the Alien RFID Reader to bind all events from the device to this logical device.&amp;#160; Note that this also creates &amp;quot;soft links&amp;quot; to both antenna of the reader. &lt;/li&gt;      &lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb31_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="195" alt="image_thumb31" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb31_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;From the &lt;strong&gt;Bind Wizard (Configure Components) &lt;/strong&gt;dialog, click &lt;strong&gt;New Component&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Click on the &lt;strong&gt;SqlServerSink &lt;/strong&gt;component, then click &lt;strong&gt;Add&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb35_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="180" alt="image_thumb35" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb35_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Type in &lt;strong&gt;SqlSink &lt;/strong&gt;as the Instance name and click &lt;strong&gt;OK&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb38_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="225" alt="image_thumb38" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb38_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Click &lt;strong&gt;Close &lt;/strong&gt;to finish adding components. &lt;/li&gt;    &lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Ensure that the &lt;strong&gt;Start the process when I click Finish &lt;/strong&gt;box is checked, then click &lt;strong&gt;Finish&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;From the RFID Manager, you should be able to see the process running. &lt;/li&gt;    &lt;li&gt;Right click on the process name and click &lt;strong&gt;View Tags&lt;/strong&gt;.&amp;#160; By default the page is on a Manual refresh, so click the &lt;strong&gt;Refresh &lt;/strong&gt;button.&amp;#160; If you don't see any tags in the window, it's time to troubleshoot!&amp;#160; Happily, troubleshooting is covered in the next installment of this series. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Now that we've confirmed tags can be read in the process, the last step before building out a reporting interface will to confirm that the event handler (the SqlSink) is processing the tags correctly.&amp;#160; Start up the &lt;strong&gt;SQL Server Management Studio&lt;/strong&gt;, and connect to the RFIDSINK database. &lt;/li&gt;    &lt;li&gt;From the list of tables in the RFIDSINK database, dump the contents of the dbo.TagEvents table.&amp;#160; The tag reads should now be visible in the database. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/Part2HandsonwithBiztalkRFIDandtheAlien96_18B9/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h1&gt;Summary&lt;/h1&gt;  &lt;p&gt;In this posting, we walked through using BizTalk RFID to communicate with the ALR-9650 and flow tag information into a database.&amp;#160; In the next posting we'll cover troubleshooting the most common problems and build out a basic reporting interface using ASP.NET.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9218159" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/masimms/archive/tags/Biztalk+RFID/default.aspx">Biztalk RFID</category><category domain="http://blogs.msdn.com/masimms/archive/tags/RFID+Hardware/default.aspx">RFID Hardware</category></item><item><title>(Part 1) - Hands on: Building an End to End Solution with Biztalk RFID and the Alien 9650</title><link>http://blogs.msdn.com/masimms/archive/2008/12/04/hands-on-building-an-end-to-end-solution-with-biztalk-rfid-and-the-alien-9650.aspx</link><pubDate>Fri, 05 Dec 2008 02:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9177324</guid><dc:creator>masimms</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/masimms/comments/9177324.aspx</comments><wfw:commentRss>http://blogs.msdn.com/masimms/commentrss.aspx?PostID=9177324</wfw:commentRss><description>&lt;p&gt;As the first post in a hands-on focused series on building out solutions with Biztalk RFID, I'm going to walk through the process of creating an end to end solution with Biztalk RFID and the Alien 9650 RFID reader.&amp;#160; Future posts in this series will cover the Motorola XR450, Impinj Speedway, and others.&amp;#160; The primary steps covered are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Installing the necessary software bits &lt;/li&gt;    &lt;li&gt;Setting up the reader (from the shipping box to the network) &lt;/li&gt;    &lt;li&gt;Performing native firmware updates &lt;/li&gt;    &lt;li&gt;Connectivity and configuration with Biztalk RFID &lt;/li&gt;    &lt;li&gt;Building a basic business logic and reporting interface &lt;/li&gt; &lt;/ul&gt;  &lt;h1&gt;Installing the necessary software bits&lt;/h1&gt;  &lt;p&gt;The first step will be to ensure that you have all of the necessary (and few optional :) software bits installed on your workstation.&amp;#160; The baseline components are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SQL Server 2005 (any edition, including express), including &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=d07219b2-1e23-49c8-8f0c-63fa18f26d3a&amp;amp;DisplayLang=en"&gt;Service Pack 2&lt;/a&gt; - &lt;a href="http://www.microsoft.com/sqlserver/2005/en/us/trial-software.aspx"&gt;trial&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Visual Studio (preferably 2008) - &lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/aa700831.aspx"&gt;trial&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Biztalk RFID - &lt;a href="http://technet.microsoft.com/en-us/biztalk/bb738059.aspx"&gt;trial&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Trial editions for each of the base software are available from the links above.&amp;#160; Note that the next release of Biztalk Server (Biztalk Server 2009) will officially support SQL Server 2008 and Visual Studio 2008, but since Visual Studio 2008 can target the base 2.0 .NET Framework it works with Biztalk Server 2006 R2 (caveat; use at your own risk - it will not be officially supported until the next release, so if something goes wrong, you're on your own :).&lt;/p&gt;  &lt;p&gt;The installation instructions for each are included with the trials, but a &lt;a href="http://download.microsoft.com/download/8/a/9/8a947a42-4f44-4f9a-886a-2fe48f8ecc6e/Quick%20Start%20Installation%20Guide%20for%20BizTalk%20RFID.htm"&gt;Quick Start Guide&lt;/a&gt; for Biztalk RFID is available.&amp;#160; Remember to install / enable MSMQ, and install &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=018A09FD-3A74-43C5-8EC1-8D789091255D&amp;amp;displaylang=en"&gt;WSE 3.0&lt;/a&gt; (required for the complete installation option of Biztalk RFID).&lt;/p&gt;  &lt;p&gt;Note: Vista User Access Control (UAC) does some strange things in conjunction with Biztalk RFID.&amp;#160; For development purposes only, it may streamline things to &lt;a href="http://www.howtogeek.com/howto/windows-vista/enable-or-disable-uac-from-the-windows-vista-command-line/"&gt;disable UAC&lt;/a&gt;.&amp;#160; As this has security implications, do this at your own risk.&lt;/p&gt;  &lt;h1&gt;Setting up the reader (from the shipping box to the network)&lt;/h1&gt;  &lt;p&gt;Every RFID reader is a little different in terms of power, network and antenna, so being familiar with the specifics of the readers you employ in your solutions is vitally important.&amp;#160; While Biztalk RFID does an excellent job of abstracting away many of the software and management related details, all the software in the world won't help if you can't turn the reader on! :)&lt;/p&gt;  &lt;p&gt;From the &lt;a href="http://www.alientechnology.com/readers/alr9650.php"&gt;Alien web site&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ALR-9650 Complete, Easy, Single-Antenna RFID Solution&lt;/strong&gt;     &lt;br /&gt;The ALR-9650 is the ideal solution for single and two-antenna applications. The reader electronics and a high-quality, circularly polarized antenna reside in a single package, eliminating external antenna cables, resulting in the simplest and least expensive installation. A second antenna port enables 2-antenna applications. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;img height="199" src="http://www.alientechnology.com/images/products/9650-lg.jpg" width="300" /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Some of the key, unique features of this device are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The device supports Power-Over-Ethernet to reduce cabling requirements.&amp;#160; One of the practical aspects of this is the provided power adapter, which can be a little tricky to plug in the first time (more about that below). &lt;/li&gt;    &lt;li&gt;Built-in antenna - excellent for applications with constrained space requirements. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The box includes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The ALR-9650 (pictured above) &lt;/li&gt;    &lt;li&gt;CD-ROM (documentation and software) &lt;/li&gt;    &lt;li&gt;Crossover Ethernet cable (for connecting PC directly to the RFID reader) &lt;/li&gt;    &lt;li&gt;Standard Ethernet cable, PoE rated (for connecting the reader to a hub or the enclosed power supply) &lt;/li&gt;    &lt;li&gt;PoE converter brick (provides a PoE connection without a full-up PoE infrastructure) &lt;/li&gt;    &lt;li&gt;RS232 serial cable &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ensure that you have all of the pieces that you're supposed to have - including the serial cable!&amp;#160; You will also need an additional Ethernet cable to connect the reader to a hub.&lt;/p&gt;  &lt;h2&gt;Installing the Software and Documentation&lt;/h2&gt;  &lt;p&gt;Before going crazy plugging things in, take the time to install the software and documentation from the provided CD-ROM.&amp;#160; The key documents will be located under&lt;/p&gt;  &lt;p&gt;Alien RFID -&amp;gt; DocZone -&amp;gt; ALR_9650&lt;/p&gt;  &lt;p&gt;in the form of the &lt;strong&gt;Hardware Setup Guide &lt;/strong&gt;and the &lt;strong&gt;Quick Installation Guide&lt;/strong&gt;.&amp;#160; I know nobody reads documentation, but if you take one single piece of advice in this whole article - READ THE HARDWARE SETUP GUIDE!!!&amp;#160; Rant over :).&amp;#160; &lt;/p&gt;  &lt;h2&gt;Connecting the Serial Connection&lt;/h2&gt;  &lt;p&gt;When setting up a reader for the first time, or performing low-level debugging a serial connection is invaluable.&amp;#160; If your PC or laptop does not have a built-in serial port, I would highly recommend purchasing a USB-to-serial adapter such as &lt;a href="http://sewelldirect.com/usbtoserial.asp"&gt;this one&lt;/a&gt;.&amp;#160;&amp;#160; Note that most big-box retailers or computer stores will carry a similar product in stock.&amp;#160; In addition to the physical connection, you'll need a terminal adapter program.&amp;#160; Note that since Hyperterminal is not a part of Windows Vista, you likely don't have a built-in one available.&amp;#160; I like a number of different (freeware) products, such as &lt;a href="http://www.ayera.com/teraterm/"&gt;TeraTerm Pro&lt;/a&gt;.&amp;#160; After downloading and installing Tera Term Pro, start the application.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="221" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Select the appropriate COM port (if using a USB-to-serial converter see the manufacturer documentation for details), and click &lt;strong&gt;OK&lt;/strong&gt;.&amp;#160; Built-in COM ports are usually COM1.&amp;#160; Click on &lt;strong&gt;Setup&lt;/strong&gt;, then &lt;strong&gt;Serial port &lt;/strong&gt;to configure the serial port settings.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="227" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_2.png" width="389" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The serial communication settings for the Alien ALR-9650 are 115200 8N1 (or, 115200 baud rate, 8 bit data, none parity, 1 bit stop, none flow control).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="217" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_3.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Powering the Reader&lt;/h2&gt;  &lt;p&gt;The fundamental aspect of using any electronic device - that wonderful stuff we call power.&amp;#160; While the ALR-9650 supports the standard Alien power adapter (the ALX-616-2 AC/DC brick), the power supply enclosed with the reader is a PoE Power Sourcing Equipment (PSE) module that &amp;quot;jumpstarts&amp;quot; power onto a standard Ethernet line.&amp;#160; As per page 18, figure 10, we'll use the enclosed PoE power supply in conjunction with the reader.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="79" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Plug one end of the enclosed Ethernet cable into the LAN port on the ALR-9650. &lt;/li&gt;    &lt;li&gt;Plug the other end of the enclosed Ethernet cable into the &lt;strong&gt;J1 DATA &amp;amp; PWR&lt;/strong&gt; port on the PSE module. &lt;/li&gt;    &lt;li&gt;Plug one end of another Ethernet cable into the &lt;strong&gt;J2 DATA &lt;/strong&gt;port on the PSE module. &lt;/li&gt;    &lt;li&gt;Plug the other end of the Ethernet cable into a network hub. &lt;/li&gt;    &lt;li&gt;If we were using an additional antenna with this reader, we would plug it into the auxiliary antenna port at this time.&amp;#160; Since we're not for this purposes of this walk-through, moving on.. &lt;/li&gt;    &lt;li&gt;Take the enclosed AC power cord and plug one end into the wall socket, the other end into the PSE module.&amp;#160; At this point, the green POWER LED on the reader should illuminate.      &lt;ol&gt;       &lt;li&gt;Note: if you're not sure which end is which on the AC power cord, please step away from the computer. &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Note: the ALR-9650 is a mono-static reader.&amp;#160; This means that a single antenna is used for both transmit and receive.&amp;#160; As such, the reader needs only a single antenna to operate.&lt;/p&gt;  &lt;p&gt;When the reader is starting up, it will print a stream of information to the serial port (which was the whole point of doing that first :).&amp;#160; The key information we'll be looking for during boot-up is the network settings, which will look like:&lt;/p&gt;  &lt;pre class="code"&gt;Network Settings:
   MAC Address : 00:1B:5F:00:0E:E1
   Hostname    : alien-000EE1
   IP Address  : 10.10.10.125
   Netmask     : 255.255.254.0
   Gateway     : 10.10.10.1
   DHCP        : 1
   DHCP Time46
   TimeServer  : 132.163.4.103
   TimeZone    : -8
   CommandPort : 23&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The key information is the IP address - this will tell you if the device has successfully captured a DHCP lease from the network.&lt;/p&gt;

&lt;p&gt;Note: Alien readers support a very useful and handy discovery feature, that is also supported by Biztalk RFID.&amp;#160; The intent of this article is to demonstrate techniques that can be used to connect to readers in edge cases (such as the reader being on a separate broadcast domain from the host PC or server).&lt;/p&gt;

&lt;h2&gt;Using the Serial Interface&lt;/h2&gt;

&lt;p&gt;The Alien readers all support a rich serial/telnet interface that allows configuration of virtually all aspects of the device.&amp;#160; While all of these features are accessible through Biztalk RFID, it's vital in troubleshooting scenarios to be able to isolate portions of the system (from the power supply on up), which is why I'm talking about them in this article.&amp;#160; All of the Alien commands are documented in their &lt;strong&gt;Reader Interface Guide&lt;/strong&gt;, but a couple of useful commands are shown below.&lt;/p&gt;

&lt;pre class="code"&gt;Alien&amp;gt;ipaddress?
IPAddress = 157.56.25.21

Alien&amp;gt;dhcp?
DHCP = ON

Alien&amp;gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;In this case we use the &lt;em&gt;ipaddress&lt;/em&gt;? and &lt;em&gt;dhcp&lt;/em&gt;? commands to query the specific IP address and dhcp configuration for the reader.&lt;/p&gt;

&lt;h2&gt;Scanning Tags&lt;/h2&gt;

&lt;p&gt;I always recommend checking for tag scans with the lowest number of moving parts (i.e. if tag reads aren't showing up in a report there are many potential sources of failure - tag, antenna, reader, network, middleware, database and the report itself).&amp;#160; Since the ALR-9650 has a built in antenna, and only requires a single antenna to implement a read point, this is relatively simple out of the box.&amp;#160; Wave a valid EPC Class 1 Gen 2 tag over the reader, then execute the t? command on the reader.&lt;/p&gt;

&lt;p&gt;Alien&amp;gt;t 
  &lt;br /&gt;30 14 35 D8 C0 10 D4 80 00 00 00 03, 0, 2008/12/04 12:59:20.691, 2, 3000&lt;/p&gt;

&lt;p&gt;If a valid tag(s) is in the antenna read field, it should show up on the display.&amp;#160; Provided this is directly out of the box, there shouldn't be any misconfigured configuration properties to handle the basic case.&amp;#160; However, in the case where the reader has been in service, it's usually a good idea to revert to the &amp;quot;stock&amp;quot; settings.&amp;#160; The easiest way to perform this operation from the console is &lt;em&gt;factorysettings.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Alien&amp;gt;factorysettings 
  &lt;br /&gt;All settings reset to factory defaults.&lt;/p&gt;

&lt;h1&gt;Peforming Native Firmware Updates&lt;/h1&gt;

&lt;p&gt;Occasionally it may be necessary to perform firmware updates using the vendor native interface.&amp;#160; A specific example of this is a reader which has a version of firmware which is not supported by the vendor's Biztalk RFID provider (usually in the case of older firmware versions).&amp;#160; If Biztalk RFID can't connect to the reader, it's not in a good position to perform firmware updates :). Firmware updates are available from the Alien web site, but you first need to register as a partner &lt;a href="http://partners.alientechnology.com/portal/login/add.php"&gt;here&lt;/a&gt;.&amp;#160; There's a manual approval process involved, so it's good to register as a partner as soon as you order your Alien equipment (though approval usually only takes a day or two).&lt;/p&gt;

&lt;p&gt;Once you've accessed the partner site, browse to Technical Information -&amp;gt; Firmware.&amp;#160; There's usually one primary &amp;quot;active&amp;quot; firmware version available that works across all of the Alien readers, in the form of a .zip package.&amp;#160; After downloading the current firmware package, unzip it to a local directory.&amp;#160; In this section we'll use the native web server interface to perform a firmware upgrade (rather than an external application such as Biztalk RFID or the Alien Gateway software).&lt;/p&gt;

&lt;p&gt;Log into the device's web management interface by navigating to the device's IP address.&amp;#160; The task selection list should look similar to the one in the picture below.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_5.png" width="193" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Upload Firmware&lt;/strong&gt;.&amp;#160; As this is the first operation that requires authentication to the device, you'll need to log in.&amp;#160; The default username and password for all Alien devices is username &lt;strong&gt;alien &lt;/strong&gt;and password &lt;strong&gt;password&lt;/strong&gt;.&amp;#160; Click on the &lt;strong&gt;Browse &lt;/strong&gt;button and select the appropriate fw aef file.&amp;#160; Click &lt;strong&gt;Upload File &lt;/strong&gt;to update the firmware image.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="99" alt="image" src="http://blogs.msdn.com/blogfiles/masimms/WindowsLiveWriter/HandsonBuildinganEndtoEndSolutionwithBiz_96AA/image_thumb_7.png" width="372" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The progress of the upload process can be viewed from the serial console (yet another reason to know how to use the serial console :).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9177324" width="1" height="1"&gt;</description></item><item><title>Primus Posting</title><link>http://blogs.msdn.com/masimms/archive/2008/08/05/primus-posting.aspx</link><pubDate>Tue, 05 Aug 2008 13:41:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8834650</guid><dc:creator>masimms</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/masimms/comments/8834650.aspx</comments><wfw:commentRss>http://blogs.msdn.com/masimms/commentrss.aspx?PostID=8834650</wfw:commentRss><description>&lt;p&gt;Coming into my fourth week here at Microsoft as a Field Program Manager in the Customer Experience group within CSD has been quite the experience.&amp;#160; My role centers around working with customers, partners and the Microsoft field teams to enable the adoption of Biztalk RFID.&amp;#160; &lt;/p&gt;  &lt;p&gt;My goal is to use this as a medium to spread the word on all of the exciting things happening both within the partner community and around Microsoft related to RFID, and to share tips and tricks for delivering Biztalk RFID based solutions.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8834650" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/masimms/archive/tags/Biztalk+RFID/default.aspx">Biztalk RFID</category></item></channel></rss>