<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Adam Salvo (z) - Technology|BizTalk</title>
    <link>http://blog.salvoz.com/</link>
    <description>newtelligence powered</description>
    <language>en-us</language>
    <copyright>Adam Salvo</copyright>
    <lastBuildDate>Thu, 26 Mar 2009 21:14:08 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.2.8279.16125</generator>
    <managingEditor>adam@salvoz.com</managingEditor>
    <webMaster>adam@salvoz.com</webMaster>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=915b1212-e73b-477b-92ba-83a032c077bf</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,915b1212-e73b-477b-92ba-83a032c077bf.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,915b1212-e73b-477b-92ba-83a032c077bf.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=915b1212-e73b-477b-92ba-83a032c077bf</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Even though I’m not actively developing in BizTalk these days, I still have a need
to go in and do some support on an existing system a couple of times a year. Of course
it takes me a little bit to get back into the BizTalk frame of mind. Today, I had
to make a couple of changes to an orchestration and deploy. Part of this process involved
un-enlisting several receive locations while I made this change. 
</p>
        <p>
When I re-enlisted the receive locations and went to check for problems, I noticed
that all of my messages where not being processed due to there be no subscription
setup for them. I knew that my orchestration should be subscribed to these messages,
and thankfully BizTalk creates a suspended message instance that lists the context
of the message at the time of the routing failure. I immediately noticed that none
of my promoted properties were in the context, which would explain the routing issue. 
</p>
        <p>
It took me a while to figure out how to fix this, but in the end I noticed that the
receive pipeline on my receive locations looked incorrect. Checking a staging server,
documentation, and an XML copy of the bindings I exported before the change, I confirmed
my suspicion. It seems that during the the deployment process and the un-enlist and
re-enlist, some of my receive locations reverted to the default pass thru receive
pipeline. After changing them back the XML receive pipeline, things are all good.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=915b1212-e73b-477b-92ba-83a032c077bf" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Missing promoted properties in BizTalk message</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,915b1212-e73b-477b-92ba-83a032c077bf.aspx</guid>
      <link>http://blog.salvoz.com/2009/03/26/MissingPromotedPropertiesInBizTalkMessage.aspx</link>
      <pubDate>Thu, 26 Mar 2009 21:14:08 GMT</pubDate>
      <description>&lt;p&gt;
Even though I’m not actively developing in BizTalk these days, I still have a need
to go in and do some support on an existing system a couple of times a year. Of course
it takes me a little bit to get back into the BizTalk frame of mind. Today, I had
to make a couple of changes to an orchestration and deploy. Part of this process involved
un-enlisting several receive locations while I made this change. 
&lt;/p&gt;
&lt;p&gt;
When I re-enlisted the receive locations and went to check for problems, I noticed
that all of my messages where not being processed due to there be no subscription
setup for them. I knew that my orchestration should be subscribed to these messages,
and thankfully BizTalk creates a suspended message instance that lists the context
of the message at the time of the routing failure. I immediately noticed that none
of my promoted properties were in the context, which would explain the routing issue. 
&lt;/p&gt;
&lt;p&gt;
It took me a while to figure out how to fix this, but in the end I noticed that the
receive pipeline on my receive locations looked incorrect. Checking a staging server,
documentation, and an XML copy of the bindings I exported before the change, I confirmed
my suspicion. It seems that during the the deployment process and the un-enlist and
re-enlist, some of my receive locations reverted to the default pass thru receive
pipeline. After changing them back the XML receive pipeline, things are all good.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=915b1212-e73b-477b-92ba-83a032c077bf" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,915b1212-e73b-477b-92ba-83a032c077bf.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=22f3565d-1c1c-4219-8172-a6c764aa4467</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,22f3565d-1c1c-4219-8172-a6c764aa4467.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,22f3565d-1c1c-4219-8172-a6c764aa4467.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=22f3565d-1c1c-4219-8172-a6c764aa4467</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For the first time in almost a year, I had to do some BizTalk development (actual
BizTalk development, not the support tool I wrote about previously) to support our
old system. We were making a change to one of our schemas, but need to send a message
that conforms to the original schema version on one of our send ports. The easiest
way I could think on how to accomplish this, would be to add a map on the send port
that transforms the message from the new schema to the old schema. Seeing as I’m was
a little rusty on my BizTalk dev skills, this took a little longer then expected.
</p>
        <p>
First, the schema I was dealing with had an element comprised of child elements, whose
Group Order Type property got changed to sequence. This resulted in errors such as
“Element E1 has unexpected child element E2 in Schema, list of possible elements include
E3”. It would be nice if the error message was a little more clear. I even ran the
schema thru a web based XML validator I found and got the same error message, so that
must an error message in the XML spec. I finally figured out what was going on by
looking at a sample XML message created using the Generate Instance fucntion and saw
that only 1 of my “required” elements was showing up. Changed the Group Order Type
to sequence fixed my problem. 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
With my test message passing the schema validation, I moved on to creating the map.
I created a new assembly to hold the map, as well as the destination schema type.
I then referenced my existing assembly to get the source schema for my map. This was
pretty straight forward, and I was able to build and deploy my updated and new assemblies
to BizTalk. Trying to keep things simple I set up 1 receive port/location and 2 send
ports along with some content based routing. On one send port, I applied my map, and
the other I did not. After sending a test message thru, I saw that both my send ports
produced a file, but neither were transformed as expected. 
</p>
        <p>
Turns out I forgot to set the receive pipeline to XMReceive…I know I’m a bit of a
BizTalk newbie sometimes. You do not need to change the pipeline from pass-thru on
the send port, just on the receive location. After correcting this, my message suspended
out with the error: “Cannot locate document specification because multiple schemas
matched the message type <a href="http://Fully.Qualified.Schema#RootNode">http://Fully.Qualified.Schema#RootNode</a>.”
This makes sense, as all I did was copy/paste my original schema to the new schema
file to preserve the existing structure, and then modified the original file, adding
my new elements. I also needed to modify the schema on the new version, indicating
a new version (which we happen to include as part of the namespace). 
</p>
        <p>
At this point things started working as I had originally envisioned. BizTalk is not
something I can quickly jump back into for some reason. There is a bit of ramp up
time to get back into the swing of things. I should probably go find some more BizTalk
stuff to fix while I’m in the right frame of mind.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=22f3565d-1c1c-4219-8172-a6c764aa4467" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk Mapping at the Send Port</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,22f3565d-1c1c-4219-8172-a6c764aa4467.aspx</guid>
      <link>http://blog.salvoz.com/2008/12/26/BizTalkMappingAtTheSendPort.aspx</link>
      <pubDate>Fri, 26 Dec 2008 23:05:05 GMT</pubDate>
      <description>&lt;p&gt;
For the first time in almost a year, I had to do some BizTalk development (actual
BizTalk development, not the support tool I wrote about previously) to support our
old system. We were making a change to one of our schemas, but need to send a message
that conforms to the original schema version on one of our send ports. The easiest
way I could think on how to accomplish this, would be to add a map on the send port
that transforms the message from the new schema to the old schema. Seeing as I’m was
a little rusty on my BizTalk dev skills, this took a little longer then expected.
&lt;/p&gt;
&lt;p&gt;
First, the schema I was dealing with had an element comprised of child elements, whose
Group Order Type property got changed to sequence. This resulted in errors such as
“Element E1 has unexpected child element E2 in Schema, list of possible elements include
E3”. It would be nice if the error message was a little more clear. I even ran the
schema thru a web based XML validator I found and got the same error message, so that
must an error message in the XML spec. I finally figured out what was going on by
looking at a sample XML message created using the Generate Instance fucntion and saw
that only 1 of my “required” elements was showing up. Changed the Group Order Type
to sequence fixed my problem. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
With my test message passing the schema validation, I moved on to creating the map.
I created a new assembly to hold the map, as well as the destination schema type.
I then referenced my existing assembly to get the source schema for my map. This was
pretty straight forward, and I was able to build and deploy my updated and new assemblies
to BizTalk. Trying to keep things simple I set up 1 receive port/location and 2 send
ports along with some content based routing. On one send port, I applied my map, and
the other I did not. After sending a test message thru, I saw that both my send ports
produced a file, but neither were transformed as expected. 
&lt;/p&gt;
&lt;p&gt;
Turns out I forgot to set the receive pipeline to XMReceive…I know I’m a bit of a
BizTalk newbie sometimes. You do not need to change the pipeline from pass-thru on
the send port, just on the receive location. After correcting this, my message suspended
out with the error: “Cannot locate document specification because multiple schemas
matched the message type &lt;a href="http://Fully.Qualified.Schema#RootNode"&gt;http://Fully.Qualified.Schema#RootNode&lt;/a&gt;.”
This makes sense, as all I did was copy/paste my original schema to the new schema
file to preserve the existing structure, and then modified the original file, adding
my new elements. I also needed to modify the schema on the new version, indicating
a new version (which we happen to include as part of the namespace). 
&lt;/p&gt;
&lt;p&gt;
At this point things started working as I had originally envisioned. BizTalk is not
something I can quickly jump back into for some reason. There is a bit of ramp up
time to get back into the swing of things. I should probably go find some more BizTalk
stuff to fix while I’m in the right frame of mind.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=22f3565d-1c1c-4219-8172-a6c764aa4467" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,22f3565d-1c1c-4219-8172-a6c764aa4467.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=ea2326f6-2a6e-41f7-bf61-cb6c6ee4ce93</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,ea2326f6-2a6e-41f7-bf61-cb6c6ee4ce93.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,ea2326f6-2a6e-41f7-bf61-cb6c6ee4ce93.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ea2326f6-2a6e-41f7-bf61-cb6c6ee4ce93</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
This morning I was greeted with a proactive alarm email stating that we had over 100
messages in our BizTalk suspend queue. What an awesome way to start my Monday morning.
Sure enough, the Biztalk admin tool showed the messages suspended out starting around
midnight, which first made me think that maybe somebody made a change somewhere. If
you couldn’t tell from the title, the error message in the Event Logs as well as the
Admin tool was: “The underlying connection was closed: Could not establish trust relationship
for the SSL/TLS secure channel” (this is on a HTTP send adapter by the way). 
</p>
        <p>
The first thing I did was attempt to browse to the destination URL in IE from the
BizTalk server. Everything worked, no errors or warnings, but here is something intesting
the cert was recently issued last week. Now why would it take a week to start seeing
errors, unless it wasn’t installed until last night? Sure enough, heard from customer
that maintains the destination server, and they updated their cert over the weekend.
So why was BizTalk having problems, but IE wasn’t?
</p>
        <p>
It appears, that BizTalk must do some sort of caching, either on the cert or the HTTP
connection. I’m not exactly sure what it does, but after restarting the host process,
everything work fine. All the messages were resumed without issue and we’ve had no
more suspend out.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ea2326f6-2a6e-41f7-bf61-cb6c6ee4ce93" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk caching SSL Certs? - The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,ea2326f6-2a6e-41f7-bf61-cb6c6ee4ce93.aspx</guid>
      <link>http://blog.salvoz.com/2008/12/15/BizTalkCachingSSLCertsTheUnderlyingConnectionWasClosedCouldNotEstablishTrustRelationshipForTheSSLTLSSecureChannel.aspx</link>
      <pubDate>Mon, 15 Dec 2008 17:00:04 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
This morning I was greeted with a proactive alarm email stating that we had over 100
messages in our BizTalk suspend queue. What an awesome way to start my Monday morning.
Sure enough, the Biztalk admin tool showed the messages suspended out starting around
midnight, which first made me think that maybe somebody made a change somewhere. If
you couldn’t tell from the title, the error message in the Event Logs as well as the
Admin tool was: “The underlying connection was closed: Could not establish trust relationship
for the SSL/TLS secure channel” (this is on a HTTP send adapter by the way). 
&lt;/p&gt;
&lt;p&gt;
The first thing I did was attempt to browse to the destination URL in IE from the
BizTalk server. Everything worked, no errors or warnings, but here is something intesting
the cert was recently issued last week. Now why would it take a week to start seeing
errors, unless it wasn’t installed until last night? Sure enough, heard from customer
that maintains the destination server, and they updated their cert over the weekend.
So why was BizTalk having problems, but IE wasn’t?
&lt;/p&gt;
&lt;p&gt;
It appears, that BizTalk must do some sort of caching, either on the cert or the HTTP
connection. I’m not exactly sure what it does, but after restarting the host process,
everything work fine. All the messages were resumed without issue and we’ve had no
more suspend out.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ea2326f6-2a6e-41f7-bf61-cb6c6ee4ce93" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,ea2326f6-2a6e-41f7-bf61-cb6c6ee4ce93.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=18b84c58-4b38-4310-afe1-ac74f66d1937</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,18b84c58-4b38-4310-afe1-ac74f66d1937.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,18b84c58-4b38-4310-afe1-ac74f66d1937.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=18b84c58-4b38-4310-afe1-ac74f66d1937</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
In <a href="http://blog.salvoz.com/2008/12/05/BizTalkWebAdminNdashPart1.aspx">part
I</a>, I talked about how I had a need for a way to managed suspended messages in
BizTalk using something other then the BizTalk Administration tool. Using a combination
of BizTalk dll’s I was able to query, read and suspend BizTalk messages. The need
for a “web” based tool is one of accessibility to our BizTalk server from remote machines
that are not directly connected to the DMZ zone that they reside in. I’ve also been
wanting to create a tech support tool for myself to manage other aspects of our hosted
solution, and this would fit in nicely with it.
</p>
        <p>
Being a glutton for punishment, I decided to sacrifice my weekend and go for the more
complex, but really cool sounding idea of a set of web services that interface with
SilverLight 2. I choose SilverLight as I’ve been wanting to get my hands dirty with
it for some time, and another member of the team was talking about doing the same,
and what’s a little friendly competition? While I had a grand vision of what my tool
would look like, which I will refer to as the Unified Administration Tool (UAT), I
knew I wouldn’t be able to code everything in one weekend. I had to set some realistic
goals and try to add only what was needed, while still allowing for future functionality
to be “plugged-in”. The good thing was, since this was pretty much just for me, I
didn’t have to worry about other peoples requirements ;) 
</p>
        <p>
The UAT is an n-tier application which will provide administrative functionality over
our hosted solution that is distributed among several servers in different DMZ zones
(as mentioned in Part I of the BizTalk Web Admin). In addition to dealing with the
distributed nature of our servers, the tool must also account for the various environments,
with one environment consisting of an instance of our solution deployed across one
or more servers. Perhaps to put this more simply is that I wanted to be able to perform
the same functions on our development, staging, demonstration and production environments.
</p>
        <p>
          <br />
I started out by created a new project folder to which all my various Visual Studio
projects will be added. I moved my BizTalkUtilities projects into the Components folder
as shown below, and then started adding the other components and UI projects as needed.
Below is an overview of how I have my solution folder setup, which will probably change
over time. The idea is that Components are reusable across all the UI and Services,
and will probably have some more domain specific wrappers. Controllers under UI will
be re-usable across each of the UI projects and provide an interface between the components
and the UI.
</p>
        <ul>
          <li>
UnifiedAdmin 
<ul><li>
_Solutions 
</li><li>
Components 
<ul><li>
BizTalkUtilities 
</li><li>
BizTalkUtilitiesTest</li></ul></li><li>
Documentation 
</li><li>
Scracth (Prototypes and other throw away code used for quick tests) 
<ul><li>
BizTalkMessageBrowser (Test win forms app for BizTalk Utilities)</li></ul></li><li>
Services 
</li><li>
UI 
<ul><li>
Controllers 
</li><li>
Silverlight 
</li><li>
SilverlightMobile (Future project) 
</li><li>
WPF (Future Project)</li></ul></li></ul></li>
        </ul>
        <p>
I decided that I will use the Entity Framework as my “ORM”, combined with Ado.Net
Data Services as my primary web services mechanism. Combined with Silverlight, I’ll
get to tackle three new technologies at once, and either learn allot, or give up,
ultimately frustrated, wishing I would have chosen a few older tried and true technologies.
Before we even get to the UI, I needed to start setting up my services and entity
model. I have a feeling I’ll be re-arranging some of these projects, but for now I
have a class library called Entities under Components, and a web project called UnifiedAdminService
under Services. 
</p>
        <p>
I really don’t know what the best practice way for organizing my entity models are,
and it seems like one entity model per project seems a bit of an over kill, however,
putting all the entities I will be working with in the same project doesn’t seem to
smell good either, as there defiantly a clear break between them. I started out with
an entity model for a database called Utilities, which will be the “glue” that holds
my Unified Admin tool together. It’s sort of a catch all database that currently contains
tables for some SQL based monitoring I have setup, as well as users (who can access
the UAT), and servers (what servers does the UAT work with). I created a new Ado.Net
Entity data model and had it auto generated the model from the database schema. This
was pretty easy and straight forward. I prefix all my table names in my schema with
various prefixes for grouping and identification, such as “mon_t” which means the
table is used for the monitoring functionality, and it’s a table. I don’t want these
prefixes in my code, so I am going to rename the entities in the model. To start with
I’m only renaming a couple until I see how the EM is updated and used throughout the
code. 
</p>
        <p>
Next I created a new Ado.Net data service in the web project. This created a new .svc
file with a code behind file that inherits from DataService&lt;T&gt;. I updated T
to reference my entity model (Entities.UtilityEntities) and also configured the security
to allow read access for entities. You do this by using the config.SetEntitySetAccessRule
method in InitializeService.  
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">class</span> TsiUtility
: DataService&lt;Entities.UtilityEntities&gt; { <span class="rem">// This method is
called only once to initialize service-wide policies.</span><span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">void</span> InitializeService(IDataServiceConfiguration
config) { config.SetEntitySetAccessRule(<span class="str">"*"</span>, EntitySetRights.AllRead);
} }</pre>
        <style type="text/css">.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; }
</style>
        <p>
Even thought the auto-generated comments for InitializeService make it sound like
it’s only called once in the life-cycle of an AppDomain, I wasn’t sure. This <a href="http://blogs.msdn.com/marcelolr/archive/2008/06/16/so-special-initializeservice-in-ado-net-data-services.aspx" target="_blank">post</a> talks
a little bit about the InitializeService method, and does in fact point out that the
InitalizeService method is only called once.
</p>
        <p>
I attempted to browse to my newly created service and was greeted with an un-informative
error, “The server encountered an error processing the request. See server logs for
more details.”. Since I’m running the development server that’s included with Visual
Studio, there are not much in the way of server logs (that I could find anyway). Jumping
into debug mode showed that the error was caused by an incorrectly configured connection
string. The connection string used my the Entity Framework is not your standard connection
string, so you need to make sure that you copy the connection string created for you
in your Entities project to your web.config in your web project (assuming your entity
model is in a separate project). I was trying to use the Server, Database, Trusted_Connection
syntax, and apparently that’s not OK.  Example connection string: 
</p>
        <blockquote>
          <p>
&lt;add name="TsiUtilityEntities" connectionString="metadata=res://*/TsiUtility.csdl|res://*/TsiUtility.ssdl|res://*/TsiUtility.msl;provider=System.Data.SqlClient;provider
connection string=&amp;quot;Data Source=Server;Initial Catalog=Utility;Integrated
Security=True;MultipleActiveResultSets=True&amp;quot;" providerName="System.Data.EntityClient"
/&gt; 
</p>
        </blockquote>
        <p>
Once I had the correct connection string, I was able to navigate my entity model using
just my browser. Of course I haven’t done any type of authentication, and I don’t
want to have just anybody browse to the URL for the UAT and start browsing, so it’s
time to add some security. Ado.Net data services makes use of existing security provides
as long as they set the HttpContext principle, so you can use HttpContext.Current.User.Identity.Name
and then compare that against records returned by the EM. Something that I didn’t
fully grasp at first, was that by the time Ado.Net Data Services “takes over” the
user should have been authenticated, so there really is no “login” event in Ado.Net
data services where you can set additional information. 
</p>
        <p>
For simplicity, I decided to use Integrated Authentication, and store additional information
after the user is authenticated. Since this is a regular asp.net application, you
can add a Global.asax, and add code to the <a href="http://msdn.microsoft.com/en-us/library/system.web.httpapplication.authenticaterequest.aspx" target="_blank">AuthenticateRequest</a> event
handler to perform additional security related code. When AuthenticateRequest is called,
whatever mechanism that is configured to handle authentication has finished, and there
should be a value in HttpContext.Current.User. What I did was user the Name property
to query my users table that was part of my entity model and cache the results in
a hash table, which itself is stored in the application context. If the user does
not exist in the database, I set the Current.User to null, and cache a null value
with the key of the user name that was authenticated. 
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <pre class="csharpcode">
          <span class="kwrd">protected</span>
          <span class="kwrd">void</span> Application_AuthenticateRequest(<span class="kwrd">object</span> sender,
EventArgs e) { <span class="kwrd">string</span> userName = HttpContext.Current.User.Identity.Name; <span class="rem">//Get
a collection of cached users. If it doesn't exist create and cache it.</span> System.Collections.Generic.Dictionary&lt;<span class="kwrd">string</span>,
Entities.User&gt; users = (Dictionary&lt;<span class="kwrd">string</span>, Entities.User&gt;)HttpContext.Current.Cache[<span class="str">"Tsi_Users"</span>]; <span class="kwrd">if</span> (users
== <span class="kwrd">null</span>) { users = <span class="kwrd">new</span> Dictionary&lt;<span class="kwrd">string</span>,
Entities.User&gt;(); HttpContext.Current.Cache.Add(<span class="str">"Tsi_Users"</span>,
users, <span class="kwrd">null</span>, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal, <span class="kwrd">null</span>); } Entities.User
user = <span class="kwrd">null</span>; <span class="rem">//Check to see if we have
a cached user for this username. Use ContainsKey as we will store</span><span class="rem">//a
null value to indicate a user is not authorized.</span><span class="kwrd">if</span> (users.ContainsKey(userName))
user = users[userName]; <span class="kwrd">else</span> { Entities.TsiUtilityEntities
entities = <span class="kwrd">new</span> Entities.TsiUtilityEntities(); user = entities.UserSet.FirstOrDefault(u
=&gt; u.WindowsUserName == userName &amp;&amp; u.IsEnabled == <span class="kwrd">true</span>);
user.ua_tx_UserServers.Load(); <span class="rem">//load servers this user has access
to.</span> } <span class="rem">//User doesn't exist in the database either, so un-authenticate
them</span><span class="rem">//allow to continue thru so we add a null object with
the username to cache</span><span class="kwrd">if</span> (user == <span class="kwrd">null</span> ||
HttpContext.Current.User.Identity.IsAuthenticated == <span class="kwrd">false</span>)
{ <span class="rem">//When this is set to null, this method should finish, but no
data will display. </span><span class="rem">//Seems like aspx pages will still display
though. However if you check the CurrentUser</span><span class="rem">//it will be
unathenticated.</span> user = <span class="kwrd">null</span>; HttpContext.Current.User
= <span class="kwrd">null</span>; } <span class="rem">//save to users collection.
Double check to make sure it wasn't added somewhere else.</span><span class="kwrd">if</span>(users.ContainsKey(userName)
== <span class="kwrd">false</span>) users.Add(userName, user); }</pre>
        <style type="text/css">.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; }
</style>
        <p>
        </p>
        <p>
What I have not decided upon, nor have I done the research into, is if I should be
caching the DataContext in the application or session cache for the user.
</p>
        <p>
So where does this leave me? Well, I certainly didn’t get even close to what I wanted
to accomplish in one weekend, as I haven’t even touched SilverLight yet. I do have
some basic authentication, but that’s more using traditional asp.net then doing anything
special with Ado.Net data services. From the looks of it, I will have to add QueryInterceptors
to every entity I wish to do security on, which seems like a pain and allot of extra
un-necessary work. Next time I hope to accomplish the following:
</p>
        <ol>
          <li>
Research to find out if you should cache the data context</li>
          <li>
Write out security requirements and research the best way to implement in Ado.Net
Data Services</li>
          <li>
Figure how I am going to have one set of services that can connect to multiple databases
(assuming the database schemas are kept in sync). 
</li>
        </ol>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=18b84c58-4b38-4310-afe1-ac74f66d1937" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk Web Admin &amp;ndash; Part II &amp;ndash; Now Unified Admin Tool</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,18b84c58-4b38-4310-afe1-ac74f66d1937.aspx</guid>
      <link>http://blog.salvoz.com/2008/12/08/BizTalkWebAdminNdashPartIINdashNowUnifiedAdminTool.aspx</link>
      <pubDate>Mon, 08 Dec 2008 03:09:26 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
In &lt;a href="http://blog.salvoz.com/2008/12/05/BizTalkWebAdminNdashPart1.aspx"&gt;part
I&lt;/a&gt;, I talked about how I had a need for a way to managed suspended messages in
BizTalk using something other then the BizTalk Administration tool. Using a combination
of BizTalk dll’s I was able to query, read and suspend BizTalk messages. The need
for a “web” based tool is one of accessibility to our BizTalk server from remote machines
that are not directly connected to the DMZ zone that they reside in. I’ve also been
wanting to create a tech support tool for myself to manage other aspects of our hosted
solution, and this would fit in nicely with it.
&lt;/p&gt;
&lt;p&gt;
Being a glutton for punishment, I decided to sacrifice my weekend and go for the more
complex, but really cool sounding idea of a set of web services that interface with
SilverLight 2. I choose SilverLight as I’ve been wanting to get my hands dirty with
it for some time, and another member of the team was talking about doing the same,
and what’s a little friendly competition? While I had a grand vision of what my tool
would look like, which I will refer to as the Unified Administration Tool (UAT), I
knew I wouldn’t be able to code everything in one weekend. I had to set some realistic
goals and try to add only what was needed, while still allowing for future functionality
to be “plugged-in”. The good thing was, since this was pretty much just for me, I
didn’t have to worry about other peoples requirements ;) 
&lt;/p&gt;
&lt;p&gt;
The UAT is an n-tier application which will provide administrative functionality over
our hosted solution that is distributed among several servers in different DMZ zones
(as mentioned in Part I of the BizTalk Web Admin). In addition to dealing with the
distributed nature of our servers, the tool must also account for the various environments,
with one environment consisting of an instance of our solution deployed across one
or more servers. Perhaps to put this more simply is that I wanted to be able to perform
the same functions on our development, staging, demonstration and production environments.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
I started out by created a new project folder to which all my various Visual Studio
projects will be added. I moved my BizTalkUtilities projects into the Components folder
as shown below, and then started adding the other components and UI projects as needed.
Below is an overview of how I have my solution folder setup, which will probably change
over time. The idea is that Components are reusable across all the UI and Services,
and will probably have some more domain specific wrappers. Controllers under UI will
be re-usable across each of the UI projects and provide an interface between the components
and the UI.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
UnifiedAdmin 
&lt;ul&gt;
&lt;li&gt;
_Solutions 
&lt;li&gt;
Components 
&lt;ul&gt;
&lt;li&gt;
BizTalkUtilities 
&lt;li&gt;
BizTalkUtilitiesTest&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Documentation 
&lt;li&gt;
Scracth (Prototypes and other throw away code used for quick tests) 
&lt;ul&gt;
&lt;li&gt;
BizTalkMessageBrowser (Test win forms app for BizTalk Utilities)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Services 
&lt;li&gt;
UI 
&lt;ul&gt;
&lt;li&gt;
Controllers 
&lt;li&gt;
Silverlight 
&lt;li&gt;
SilverlightMobile (Future project) 
&lt;li&gt;
WPF (Future Project)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I decided that I will use the Entity Framework as my “ORM”, combined with Ado.Net
Data Services as my primary web services mechanism. Combined with Silverlight, I’ll
get to tackle three new technologies at once, and either learn allot, or give up,
ultimately frustrated, wishing I would have chosen a few older tried and true technologies.
Before we even get to the UI, I needed to start setting up my services and entity
model. I have a feeling I’ll be re-arranging some of these projects, but for now I
have a class library called Entities under Components, and a web project called UnifiedAdminService
under Services. 
&lt;/p&gt;
&lt;p&gt;
I really don’t know what the best practice way for organizing my entity models are,
and it seems like one entity model per project seems a bit of an over kill, however,
putting all the entities I will be working with in the same project doesn’t seem to
smell good either, as there defiantly a clear break between them. I started out with
an entity model for a database called Utilities, which will be the “glue” that holds
my Unified Admin tool together. It’s sort of a catch all database that currently contains
tables for some SQL based monitoring I have setup, as well as users (who can access
the UAT), and servers (what servers does the UAT work with). I created a new Ado.Net
Entity data model and had it auto generated the model from the database schema. This
was pretty easy and straight forward. I prefix all my table names in my schema with
various prefixes for grouping and identification, such as “mon_t” which means the
table is used for the monitoring functionality, and it’s a table. I don’t want these
prefixes in my code, so I am going to rename the entities in the model. To start with
I’m only renaming a couple until I see how the EM is updated and used throughout the
code. 
&lt;/p&gt;
&lt;p&gt;
Next I created a new Ado.Net data service in the web project. This created a new .svc
file with a code behind file that inherits from DataService&amp;lt;T&amp;gt;. I updated T
to reference my entity model (Entities.UtilityEntities) and also configured the security
to allow read access for entities. You do this by using the config.SetEntitySetAccessRule
method in InitializeService.&amp;nbsp; 
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TsiUtility
: DataService&amp;lt;Entities.UtilityEntities&amp;gt; { &lt;span class="rem"&gt;// This method is
called only once to initialize service-wide policies.&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InitializeService(IDataServiceConfiguration
config) { config.SetEntitySetAccessRule(&lt;span class="str"&gt;"*"&lt;/span&gt;, EntitySetRights.AllRead);
} }&lt;/pre&gt;
&lt;style type="text/css"&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;
Even thought the auto-generated comments for InitializeService make it sound like
it’s only called once in the life-cycle of an AppDomain, I wasn’t sure. This &lt;a href="http://blogs.msdn.com/marcelolr/archive/2008/06/16/so-special-initializeservice-in-ado-net-data-services.aspx" target="_blank"&gt;post&lt;/a&gt; talks
a little bit about the InitializeService method, and does in fact point out that the
InitalizeService method is only called once.
&lt;/p&gt;
&lt;p&gt;
I attempted to browse to my newly created service and was greeted with an un-informative
error, “The server encountered an error processing the request. See server logs for
more details.”. Since I’m running the development server that’s included with Visual
Studio, there are not much in the way of server logs (that I could find anyway). Jumping
into debug mode showed that the error was caused by an incorrectly configured connection
string. The connection string used my the Entity Framework is not your standard connection
string, so you need to make sure that you copy the connection string created for you
in your Entities project to your web.config in your web project (assuming your entity
model is in a separate project). I was trying to use the Server, Database, Trusted_Connection
syntax, and apparently that’s not OK.&amp;nbsp; Example connection string: 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&amp;lt;add name="TsiUtilityEntities" connectionString="metadata=res://*/TsiUtility.csdl|res://*/TsiUtility.ssdl|res://*/TsiUtility.msl;provider=System.Data.SqlClient;provider
connection string=&amp;amp;quot;Data Source=Server;Initial Catalog=Utility;Integrated
Security=True;MultipleActiveResultSets=True&amp;amp;quot;" providerName="System.Data.EntityClient"
/&amp;gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Once I had the correct connection string, I was able to navigate my entity model using
just my browser. Of course I haven’t done any type of authentication, and I don’t
want to have just anybody browse to the URL for the UAT and start browsing, so it’s
time to add some security. Ado.Net data services makes use of existing security provides
as long as they set the HttpContext principle, so you can use HttpContext.Current.User.Identity.Name
and then compare that against records returned by the EM. Something that I didn’t
fully grasp at first, was that by the time Ado.Net Data Services “takes over” the
user should have been authenticated, so there really is no “login” event in Ado.Net
data services where you can set additional information. 
&lt;/p&gt;
&lt;p&gt;
For simplicity, I decided to use Integrated Authentication, and store additional information
after the user is authenticated. Since this is a regular asp.net application, you
can add a Global.asax, and add code to the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httpapplication.authenticaterequest.aspx" target="_blank"&gt;AuthenticateRequest&lt;/a&gt; event
handler to perform additional security related code. When AuthenticateRequest is called,
whatever mechanism that is configured to handle authentication has finished, and there
should be a value in HttpContext.Current.User. What I did was user the Name property
to query my users table that was part of my entity model and cache the results in
a hash table, which itself is stored in the application context. If the user does
not exist in the database, I set the Current.User to null, and cache a null value
with the key of the user name that was authenticated. 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Application_AuthenticateRequest(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender,
EventArgs e) { &lt;span class="kwrd"&gt;string&lt;/span&gt; userName = HttpContext.Current.User.Identity.Name; &lt;span class="rem"&gt;//Get
a collection of cached users. If it doesn't exist create and cache it.&lt;/span&gt; System.Collections.Generic.Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;,
Entities.User&amp;gt; users = (Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, Entities.User&amp;gt;)HttpContext.Current.Cache[&lt;span class="str"&gt;"Tsi_Users"&lt;/span&gt;]; &lt;span class="kwrd"&gt;if&lt;/span&gt; (users
== &lt;span class="kwrd"&gt;null&lt;/span&gt;) { users = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;,
Entities.User&amp;gt;(); HttpContext.Current.Cache.Add(&lt;span class="str"&gt;"Tsi_Users"&lt;/span&gt;,
users, &lt;span class="kwrd"&gt;null&lt;/span&gt;, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal, &lt;span class="kwrd"&gt;null&lt;/span&gt;); } Entities.User
user = &lt;span class="kwrd"&gt;null&lt;/span&gt;; &lt;span class="rem"&gt;//Check to see if we have
a cached user for this username. Use ContainsKey as we will store&lt;/span&gt; &lt;span class="rem"&gt;//a
null value to indicate a user is not authorized.&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (users.ContainsKey(userName))
user = users[userName]; &lt;span class="kwrd"&gt;else&lt;/span&gt; { Entities.TsiUtilityEntities
entities = &lt;span class="kwrd"&gt;new&lt;/span&gt; Entities.TsiUtilityEntities(); user = entities.UserSet.FirstOrDefault(u
=&amp;gt; u.WindowsUserName == userName &amp;amp;&amp;amp; u.IsEnabled == &lt;span class="kwrd"&gt;true&lt;/span&gt;);
user.ua_tx_UserServers.Load(); &lt;span class="rem"&gt;//load servers this user has access
to.&lt;/span&gt; } &lt;span class="rem"&gt;//User doesn't exist in the database either, so un-authenticate
them&lt;/span&gt; &lt;span class="rem"&gt;//allow to continue thru so we add a null object with
the username to cache&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (user == &lt;span class="kwrd"&gt;null&lt;/span&gt; ||
HttpContext.Current.User.Identity.IsAuthenticated == &lt;span class="kwrd"&gt;false&lt;/span&gt;)
{ &lt;span class="rem"&gt;//When this is set to null, this method should finish, but no
data will display. &lt;/span&gt; &lt;span class="rem"&gt;//Seems like aspx pages will still display
though. However if you check the CurrentUser&lt;/span&gt; &lt;span class="rem"&gt;//it will be
unathenticated.&lt;/span&gt; user = &lt;span class="kwrd"&gt;null&lt;/span&gt;; HttpContext.Current.User
= &lt;span class="kwrd"&gt;null&lt;/span&gt;; } &lt;span class="rem"&gt;//save to users collection.
Double check to make sure it wasn't added somewhere else.&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt;(users.ContainsKey(userName)
== &lt;span class="kwrd"&gt;false&lt;/span&gt;) users.Add(userName, user); }&lt;/pre&gt;
&lt;style type="text/css"&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;
&lt;/p&gt;
&lt;p&gt;
What I have not decided upon, nor have I done the research into, is if I should be
caching the DataContext in the application or session cache for the user.
&lt;/p&gt;
&lt;p&gt;
So where does this leave me? Well, I certainly didn’t get even close to what I wanted
to accomplish in one weekend, as I haven’t even touched SilverLight yet. I do have
some basic authentication, but that’s more using traditional asp.net then doing anything
special with Ado.Net data services. From the looks of it, I will have to add QueryInterceptors
to every entity I wish to do security on, which seems like a pain and allot of extra
un-necessary work. Next time I hope to accomplish the following:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Research to find out if you should cache the data context&lt;/li&gt;
&lt;li&gt;
Write out security requirements and research the best way to implement in Ado.Net
Data Services&lt;/li&gt;
&lt;li&gt;
Figure how I am going to have one set of services that can connect to multiple databases
(assuming the database schemas are kept in sync). 
&lt;/li&gt;
&lt;/ol&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=18b84c58-4b38-4310-afe1-ac74f66d1937" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,18b84c58-4b38-4310-afe1-ac74f66d1937.aspx</comments>
      <category>Technology/BizTalk</category>
      <category>Technology/Programming</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=bd6c4ecd-9563-4683-b8d6-3a4334ff45e6</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,bd6c4ecd-9563-4683-b8d6-3a4334ff45e6.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,bd6c4ecd-9563-4683-b8d6-3a4334ff45e6.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=bd6c4ecd-9563-4683-b8d6-3a4334ff45e6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It’s been awhile since I’ve done any BizTalk development since my last project got
canceled. However, we are still using BizTalk, and with that comes administration.
One of the more tedious tasks is responding to suspended messages. There are a couple
of common tasks that I do when I see that a message has been suspended.
</p>
        <ul>
          <li>
Resume because a destination location that was unavailable is now available (i.e.
Customer Web Service) 
</li>
          <li>
Terminate instance because it’s not a critical message and do nothing else 
</li>
          <li>
Terminate instance, then fix and resubmit message</li>
        </ul>
        <p>
While BizTalk provides the BizTalk Administration tool in BizTalk 2006, which is a
much needed improvement over the tools in BizTalk 2004, it leaves something to be
desired. What I would like is a web based tool to manage my suspend queue, with some
additional logic for filtering messages, so I can quickly determine if I need to terminate
or resume. I’d like a web based tool, because I don’t have direct access to the SQL
server that BizTalk uses as it’s in a DMZ. A web tool would allow me to manage the
suspend queue from anywhere, even from home.
</p>
        <p>
After a bit of searching, I didn’t find anything else out there that fit my exact
needs. There was a project on CodePlex that looked like it might have been a good
start, but didn’t look like it had suspend queue management (but it did look like
it had support for configuring the various artifacts, like ports, orchestration, etc).
I decided to write my own, as with most endeavors, it would serve as a good learning
experience.
</p>
        <p>
While searching for an already made tool, I found several references to Microsoft.BizTalk.Operations
for getting messages out of BizTalk. After playing around for a bit I got something
working that returns me a list of suspended messages. 
</p>
        <pre class="csharpcode">
          <span class="kwrd">using</span> Microsoft.BizTalk.Operations
... Operations operations = <span class="kwrd">new</span> Operations(<span class="str">"localhost"</span>, <span class="str">"BizTalkMgmtDb"</span>);
List&lt;BizTalkMessage&gt; suspended = <span class="kwrd">new</span> List&lt;BizTalkMessage&gt;(); <span class="kwrd">foreach</span>(BizTalkMessage <span class="kwrd">in</span> operations.GetMessages().Cast&lt;BizTalkMessage&gt;())
{ <span class="kwrd">if</span> ((msg.MessageStatus &amp; MessageStatus.SuspendedAll)
!= 0) suspended.Add(msg); } <span class="kwrd">return</span> suspended;</pre>
        <style type="text/css">.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; }
</style>
        <p>
I found out that I needed some other Dll’s as well:
</p>
        <ul>
          <li>
Microsoft.BizTalk.DBAccessor (pulled from GAC) 
</li>
          <li>
Microsoft.BizTalk.Operations (%Program Files%\Microsoft BizTalk Server 2006\) 
</li>
          <li>
Microsoft.BizTalk.Pipeline (%Program Files%\Microsoft BizTalk Server 2006\) 
</li>
          <li>
Microsoft.BizTalk.Tracing (pulled from GAC) 
</li>
          <li>
BTSDBAccessor.dll (non-managed code. Add to project and set to copy to output directory)</li>
        </ul>
        <p>
Since I’m using BizTalk dll’s that are only available by installing BizTalk sever,
I won’t be able to redeploy those, so you’ll have to add them your self and rebuild
the project. So yes, eventually I’d like to release the source for this little project.
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
After I was able to get references to the suspended messages, that left inspecting
the messages to get various information, like why it was suspend, and the actual message
body, and finally executing the resume or terminate command. 
</p>
        <p>
Resume and terminate are really easy, as once you have the message, you can just use
it’s InstanceId property and pass it to operations.ResumeInstance or operations.TerminateInstance.
Getting the message body is a little more difficult, but not that bad.
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">static</span>
          <span class="kwrd">string</span> GetMessageBodyAsString(BizTalkMessage
message) { <span class="kwrd">string</span> body = <span class="kwrd">string</span>.Empty; <span class="kwrd">using</span> (System.IO.StreamReader
reader = <span class="kwrd">new</span> System.IO.StreamReader(message.BodyPart.Data))
{ body = reader.ReadToEnd(); } <span class="kwrd">return</span> body; }</pre>
        <style type="text/css">.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; }
</style>
        <p>
        </p>
        <p>
Ok, so it wasn’t that easy. When I went to run my code I got the following error when
trying to access the Message.BodyPart property of BizTalkMessage: An attempt was made
to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) –
Microsoft.BizTalk.Pipeline. I thought that maybe I had an incompatibility between
RTM and R2 versions of the various DLLs. Well, I fixed that but the error persisted.
It was at this time I realized that the unmanaged code (BTSDBAccessor.dll), might
not be compatible with my 64bit operating system. So I tried running this on a 32
bit box, and got another exception that indicated that I was most likely missing a
dependency for BTSDBAccessor. Finally, I ran the code on a 32 bit box that had BizTalk
installed, and it worked fine.
</p>
        <p>
So you might be asking yourself, why wouldn’t you run this on the BizTalk box? Well
I want this to be accessible via the web, and our BizTalk box does not do any front
end web hosting, that is handled my a separate set of machines in another zone. I
also wasn’t planning on installing BizTalk on the front end web servers either, so
I needed to come up with a work around that avoided a BizTalk install. Using ProcessMonitor,
I was able to come up with a list of dll’s that my application was accessing, which
I have listed below. These dll’s reside in %Program Files%\Microsoft Biztalk Server
2006 on 32 bit systems, or in a bin64 sub-folder on 64 bit systems. Some of the dll’s
need to be registered using regsvr32.
</p>
        <ul>
          <li>
BTSCache.dll (regsvr32) 
</li>
          <li>
BTSDBAccessor.dll 
</li>
          <li>
BTSErrorHandler.dll (regsvr32) 
</li>
          <li>
BTSMessageAgent.dll (regsvr32) 
</li>
          <li>
BTSPerfCounters.dll 
</li>
          <li>
BTSSchemaCache.dll</li>
        </ul>
        <p>
So now I have my test app running on a 64 bit install of Server 2008, just like my
web front end servers, and I am able to query messages, find the suspended messages,
and terminate those messages that are suspended. My next step, and topic of part 2
will be turning this into some type of web based application. I haven’t decided if
that will be Asp.Net, Asp.Net MVC, or Win Forms using WCF web services.
</p>
        <p>
          <strong>UPDATE</strong>:
</p>
        <p>
I was having some problems registering the unmanaged DLL’s on another Server 2008
machine (error code 0x80070005), which seems be an access denied error. I should point
out that I was using a batch file to register all of the dll’s, which I also tried
doing a run as Administrator. That failed, but with a different and even less helpful
error message. I eventually opened up a command prompt as an administrator and manually
ran regsvr32, and that seemed to work. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=bd6c4ecd-9563-4683-b8d6-3a4334ff45e6" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk Web Admin &amp;ndash; Part 1</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,bd6c4ecd-9563-4683-b8d6-3a4334ff45e6.aspx</guid>
      <link>http://blog.salvoz.com/2008/12/05/BizTalkWebAdminNdashPart1.aspx</link>
      <pubDate>Fri, 05 Dec 2008 20:20:43 GMT</pubDate>
      <description>&lt;p&gt;
It’s been awhile since I’ve done any BizTalk development since my last project got
canceled. However, we are still using BizTalk, and with that comes administration.
One of the more tedious tasks is responding to suspended messages. There are a couple
of common tasks that I do when I see that a message has been suspended.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Resume because a destination location that was unavailable is now available (i.e.
Customer Web Service) 
&lt;li&gt;
Terminate instance because it’s not a critical message and do nothing else 
&lt;li&gt;
Terminate instance, then fix and resubmit message&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
While BizTalk provides the BizTalk Administration tool in BizTalk 2006, which is a
much needed improvement over the tools in BizTalk 2004, it leaves something to be
desired. What I would like is a web based tool to manage my suspend queue, with some
additional logic for filtering messages, so I can quickly determine if I need to terminate
or resume. I’d like a web based tool, because I don’t have direct access to the SQL
server that BizTalk uses as it’s in a DMZ. A web tool would allow me to manage the
suspend queue from anywhere, even from home.
&lt;/p&gt;
&lt;p&gt;
After a bit of searching, I didn’t find anything else out there that fit my exact
needs. There was a project on CodePlex that looked like it might have been a good
start, but didn’t look like it had suspend queue management (but it did look like
it had support for configuring the various artifacts, like ports, orchestration, etc).
I decided to write my own, as with most endeavors, it would serve as a good learning
experience.
&lt;/p&gt;
&lt;p&gt;
While searching for an already made tool, I found several references to Microsoft.BizTalk.Operations
for getting messages out of BizTalk. After playing around for a bit I got something
working that returns me a list of suspended messages. 
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.BizTalk.Operations
... Operations operations = &lt;span class="kwrd"&gt;new&lt;/span&gt; Operations(&lt;span class="str"&gt;"localhost"&lt;/span&gt;, &lt;span class="str"&gt;"BizTalkMgmtDb"&lt;/span&gt;);
List&amp;lt;BizTalkMessage&amp;gt; suspended = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;BizTalkMessage&amp;gt;(); &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(BizTalkMessage &lt;span class="kwrd"&gt;in&lt;/span&gt; operations.GetMessages().Cast&amp;lt;BizTalkMessage&amp;gt;())
{ &lt;span class="kwrd"&gt;if&lt;/span&gt; ((msg.MessageStatus &amp;amp; MessageStatus.SuspendedAll)
!= 0) suspended.Add(msg); } &lt;span class="kwrd"&gt;return&lt;/span&gt; suspended;&lt;/pre&gt;
&lt;style type="text/css"&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;
I found out that I needed some other Dll’s as well:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Microsoft.BizTalk.DBAccessor (pulled from GAC) 
&lt;li&gt;
Microsoft.BizTalk.Operations (%Program Files%\Microsoft BizTalk Server 2006\) 
&lt;li&gt;
Microsoft.BizTalk.Pipeline (%Program Files%\Microsoft BizTalk Server 2006\) 
&lt;li&gt;
Microsoft.BizTalk.Tracing (pulled from GAC) 
&lt;li&gt;
BTSDBAccessor.dll (non-managed code. Add to project and set to copy to output directory)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Since I’m using BizTalk dll’s that are only available by installing BizTalk sever,
I won’t be able to redeploy those, so you’ll have to add them your self and rebuild
the project. So yes, eventually I’d like to release the source for this little project.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
After I was able to get references to the suspended messages, that left inspecting
the messages to get various information, like why it was suspend, and the actual message
body, and finally executing the resume or terminate command. 
&lt;/p&gt;
&lt;p&gt;
Resume and terminate are really easy, as once you have the message, you can just use
it’s InstanceId property and pass it to operations.ResumeInstance or operations.TerminateInstance.
Getting the message body is a little more difficult, but not that bad.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetMessageBodyAsString(BizTalkMessage
message) { &lt;span class="kwrd"&gt;string&lt;/span&gt; body = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty; &lt;span class="kwrd"&gt;using&lt;/span&gt; (System.IO.StreamReader
reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.IO.StreamReader(message.BodyPart.Data))
{ body = reader.ReadToEnd(); } &lt;span class="kwrd"&gt;return&lt;/span&gt; body; }&lt;/pre&gt;
&lt;style type="text/css"&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;
&lt;/p&gt;
&lt;p&gt;
Ok, so it wasn’t that easy. When I went to run my code I got the following error when
trying to access the Message.BodyPart property of BizTalkMessage: An attempt was made
to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) –
Microsoft.BizTalk.Pipeline. I thought that maybe I had an incompatibility between
RTM and R2 versions of the various DLLs. Well, I fixed that but the error persisted.
It was at this time I realized that the unmanaged code (BTSDBAccessor.dll), might
not be compatible with my 64bit operating system. So I tried running this on a 32
bit box, and got another exception that indicated that I was most likely missing a
dependency for BTSDBAccessor. Finally, I ran the code on a 32 bit box that had BizTalk
installed, and it worked fine.
&lt;/p&gt;
&lt;p&gt;
So you might be asking yourself, why wouldn’t you run this on the BizTalk box? Well
I want this to be accessible via the web, and our BizTalk box does not do any front
end web hosting, that is handled my a separate set of machines in another zone. I
also wasn’t planning on installing BizTalk on the front end web servers either, so
I needed to come up with a work around that avoided a BizTalk install. Using ProcessMonitor,
I was able to come up with a list of dll’s that my application was accessing, which
I have listed below. These dll’s reside in %Program Files%\Microsoft Biztalk Server
2006 on 32 bit systems, or in a bin64 sub-folder on 64 bit systems. Some of the dll’s
need to be registered using regsvr32.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
BTSCache.dll (regsvr32) 
&lt;li&gt;
BTSDBAccessor.dll 
&lt;li&gt;
BTSErrorHandler.dll (regsvr32) 
&lt;li&gt;
BTSMessageAgent.dll (regsvr32) 
&lt;li&gt;
BTSPerfCounters.dll 
&lt;li&gt;
BTSSchemaCache.dll&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So now I have my test app running on a 64 bit install of Server 2008, just like my
web front end servers, and I am able to query messages, find the suspended messages,
and terminate those messages that are suspended. My next step, and topic of part 2
will be turning this into some type of web based application. I haven’t decided if
that will be Asp.Net, Asp.Net MVC, or Win Forms using WCF web services.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;UPDATE&lt;/strong&gt;:
&lt;/p&gt;
&lt;p&gt;
I was having some problems registering the unmanaged DLL’s on another Server 2008
machine (error code 0x80070005), which seems be an access denied error. I should point
out that I was using a batch file to register all of the dll’s, which I also tried
doing a run as Administrator. That failed, but with a different and even less helpful
error message. I eventually opened up a command prompt as an administrator and manually
ran regsvr32, and that seemed to work. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=bd6c4ecd-9563-4683-b8d6-3a4334ff45e6" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,bd6c4ecd-9563-4683-b8d6-3a4334ff45e6.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=14395602-5143-47ed-a58c-19d036d10856</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,14395602-5143-47ed-a58c-19d036d10856.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,14395602-5143-47ed-a58c-19d036d10856.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=14395602-5143-47ed-a58c-19d036d10856</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the most interesting pieces of information I took away from BizTalk solution
days was a comment made by Xterprise during their presentation where they said that
the next version of BizTalk RFID would have features specifically for mobile devices.
Based on Anush's reaction, I thought this was really super secret information.
</p>
        <p>
Turns out that the fact there is a BizTalk RFID Mobile isn't all the super secret,
although the feature set has not been released yet to the best of my knowledge. 
</p>
        <p>
BizTalk RFID Mobile Sightings:
</p>
        <ul>
          <li>
TechEd 08 for IT Professionals - <a href="https://www.msteched.com/itpro/public/sessions.aspx">Building
Rich RFID-Enabled Applications for Windows Embedded CE Devices Using Microsoft BizTalk
RFID Mobile</a></li>
          <li>
            <a title="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2193649&amp;SiteID=1" href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2193649&amp;SiteID=1">http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2193649&amp;SiteID=1</a>
          </li>
          <li>
            <a title="http://blogs.msdn.com/biztalkrfid/archive/2007/04/29/biztalk-rfid-rfid-journal-live.aspx" href="http://blogs.msdn.com/biztalkrfid/archive/2007/04/29/biztalk-rfid-rfid-journal-live.aspx">http://blogs.msdn.com/biztalkrfid/archive/2007/04/29/biztalk-rfid-rfid-journal-live.aspx</a>
          </li>
        </ul>
        <p>
An interesting note. The BizTalk RFID for mobile devices is part of the Windows Embedded
track, but it only listed under TechEd for <em>IT Professionals</em>. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=14395602-5143-47ed-a58c-19d036d10856" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk RFID Mobile</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,14395602-5143-47ed-a58c-19d036d10856.aspx</guid>
      <link>http://blog.salvoz.com/2008/03/05/BizTalkRFIDMobile.aspx</link>
      <pubDate>Wed, 05 Mar 2008 22:11:57 GMT</pubDate>
      <description>&lt;p&gt;
One of the most interesting pieces of information I took away from BizTalk solution
days was a comment made by Xterprise during their presentation where they said that
the next version of BizTalk RFID would have features specifically for mobile devices.
Based on Anush's reaction, I thought this was really super secret information.
&lt;/p&gt;
&lt;p&gt;
Turns out that the fact there is a BizTalk RFID Mobile isn't all the super secret,
although the feature set has not been released yet to the best of my knowledge. 
&lt;/p&gt;
&lt;p&gt;
BizTalk RFID Mobile Sightings:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
TechEd 08 for IT Professionals - &lt;a href="https://www.msteched.com/itpro/public/sessions.aspx"&gt;Building
Rich RFID-Enabled Applications for Windows Embedded CE Devices Using Microsoft BizTalk
RFID Mobile&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a title="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2193649&amp;amp;SiteID=1" href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2193649&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2193649&amp;amp;SiteID=1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a title="http://blogs.msdn.com/biztalkrfid/archive/2007/04/29/biztalk-rfid-rfid-journal-live.aspx" href="http://blogs.msdn.com/biztalkrfid/archive/2007/04/29/biztalk-rfid-rfid-journal-live.aspx"&gt;http://blogs.msdn.com/biztalkrfid/archive/2007/04/29/biztalk-rfid-rfid-journal-live.aspx&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
An interesting note. The BizTalk RFID for mobile devices is part of the Windows Embedded
track, but it only listed under TechEd for &lt;em&gt;IT Professionals&lt;/em&gt;. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=14395602-5143-47ed-a58c-19d036d10856" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,14395602-5143-47ed-a58c-19d036d10856.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=e481f5e7-ba94-4d51-975b-acdea904ec12</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,e481f5e7-ba94-4d51-975b-acdea904ec12.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,e481f5e7-ba94-4d51-975b-acdea904ec12.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e481f5e7-ba94-4d51-975b-acdea904ec12</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am safely back in Madison, having returned from BizTalk RFID Solution Days 2008,
held in Bellevue/Redmond Washington. You can read my four previous posts for some
day by day coverage: Day <a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay0.aspx">0</a>, <a href="http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay1.aspx">1</a>, <a href="http://blog.salvoz.com/2008/02/20/BizTalkRFIDSolutionsDaysDay2.aspx">2</a>, <a href="http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay3.aspx">3</a>, <a href="http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay4.aspx">4</a>.
</p>
        <p>
Overall I enjoyed the conference and training. It was apparent that the conference
was defiantly for management and the business types, and while the training was more
technical, it still felt slightly biased towards non-technical people (more in the
training later). The logistics were pretty solid with the location working out nicely.
Had I know about the <strong>free</strong> Microsoft shuttle to the Microsoft Campus
from the Westin hotel the first day, it would been even better. I can appreciate the
abundance of electrical hookups at the tables in the main conference hall, but the
lack of free wi-fi was like a punch in the stomach. As I mentioned in a previous post,
actual guests of the Westin might have gotten free Wi-Fi, but I don't know why this
wasn't extended to all conference attendees. At a minimum, they could have brought
in a couple of hubs and added some wire drops to a portion of the main conference
hall for those of us left out. In the end it was a minor inconvenience, although my
EDVO reception inside was a little lacking at times on my smart phone. 
</p>
        <p>
I can't say enough about the Ogio backpack we all got. It's easily a $50 backpack,
well built and survived the flight home as checked baggage (had too much stuff to
bring back to fit in just the one bag I brought out with me). While it won't fit my
17" laptop, I have found another use for it. My wife's birthday was on Friday, and
has been wanting a nice backpack for her new job, so guess what she got for her birthday?
What can I say, I love my wife, and the fact that she is perfectly happy getting my
conference backpack as her "gift" :)
</p>
        <p>
I found great value in the key note presentation by John Fontanella, as well as good
value in some of the other presentations. Specially, Cathexis, Freedom Shopping and
Impinj. There was one thing lacking, and that was what we can expect from the next
version of BizTalk RFID. A member of the Xterprise team did let a little piece of
information slip which definetly caught my attention, and that was that the next version
is going to have features for mobile devices (ka-ching). Also, a display showing off
BizTalk RFID was strangely absent. Just because people attended the conference doesn't
mean they are going to make use of the product, and I think alot of people were there
to evaluate BizTalk RFID itself. Why not have a mock warehouse setup with some RFID
readers and label printers running off BizTalk RFID?
</p>
        <p>
Moving onto the training, I would like to say that I did learn a great deal of information.
The concept of developing a "solution" starting with the first lab exercise and continuing
to expand upon it for the duration of the class was an excellent idea and should be
used more often. Instead of wasting time watching progress bars advance, having an
environment already setup saved allot of time and allowed us to concentrate on actual
substance starting with the first lab. That first lab which showed were stuff was
installed, including log files, saved some time in later labs when I had to trouble
shoot. I would like to note that it always seems like BAM gets shafted in BizTalk
(and related classes), so I would almost like to see that brought forward for a change.
</p>
        <p>
There were some disclaimers stating that the code implemented was not up to best practice
standards. My question is, why isn't it? That is, why not show what best practice
code looks like? Maybe for the parts that we had to type our selves you could cut
some corners, but there were large portions of code that was done already for us that
could have been implemented better and had complete unit tests. It's a perfect opportunity
to show how to write decent code. Instead, the business type people and managers got
to see how "easy" it was to get stuff working. Mick did make a couple of statements
to try to avoid this incorrect conclusion, but I feel sorry for some poor developers
out there who will get a line like "I got it to work and I'm not even a developer". 
</p>
        <p>
While the physical RFID reader we got for use in the lab was nice, it did create an
issue with the solution we were developing. We really needed two RFID readers in order
for the solution (parking garage with an entry and exit ramp) to make more sense.
The retail price listed for the DLP-RFID1 is $119.95, but as you can see from this <a href="http://www.trossenrobotics.com/store/c/2786-RFID-Readers.aspx">site</a>,
there are several lower cost options available, which if bought in bulk, might allow
for 2 readers per student. Either that, or design a solution that only requires one
reader (either change the solution, or add additional processing logic to make the
solution work better with a single reader).
</p>
        <p>
The Microsoft Conference center was top notch, but I might have been biased by the
enormous cooler full of free beverages (soda, milk, juice). While I already mentioned
it once, it deserves a second mention, and that is the free shuttle that runs Monday
thru Friday from 7am to 8:30 PM between Lincoln Square (Westin Hotel in Bellevue)
and the Microsoft Campus. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=e481f5e7-ba94-4d51-975b-acdea904ec12" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk RFID Solution Days - Wrap up</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,e481f5e7-ba94-4d51-975b-acdea904ec12.aspx</guid>
      <link>http://blog.salvoz.com/2008/02/25/BizTalkRFIDSolutionDaysWrapUp.aspx</link>
      <pubDate>Mon, 25 Feb 2008 02:26:13 GMT</pubDate>
      <description>&lt;p&gt;
I am safely back in Madison, having returned from BizTalk RFID Solution Days 2008,
held in Bellevue/Redmond Washington. You can read my four previous posts for some
day by day coverage: Day &lt;a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay0.aspx"&gt;0&lt;/a&gt;, &lt;a href="http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay1.aspx"&gt;1&lt;/a&gt;, &lt;a href="http://blog.salvoz.com/2008/02/20/BizTalkRFIDSolutionsDaysDay2.aspx"&gt;2&lt;/a&gt;, &lt;a href="http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay3.aspx"&gt;3&lt;/a&gt;, &lt;a href="http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay4.aspx"&gt;4&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Overall I enjoyed the conference and training. It was apparent that the conference
was defiantly for management and the business types, and while the training was more
technical, it still felt slightly biased towards non-technical people (more in the
training later). The logistics were pretty solid with the location working out nicely.
Had I know about the &lt;strong&gt;free&lt;/strong&gt; Microsoft shuttle to the Microsoft Campus
from the Westin hotel the first day, it would been even better. I can appreciate the
abundance of electrical hookups at the tables in the main conference hall, but the
lack of free wi-fi was like a punch in the stomach. As I mentioned in a previous post,
actual guests of the Westin might have gotten free Wi-Fi, but I don't know why this
wasn't extended to all conference attendees. At a minimum, they could have brought
in a couple of hubs and added some wire drops to a portion of the main conference
hall for those of us left out. In the end it was a minor inconvenience, although my
EDVO reception inside was a little lacking at times on my smart phone. 
&lt;/p&gt;
&lt;p&gt;
I can't say enough about the Ogio backpack we all got. It's easily a $50 backpack,
well built and survived the flight home as checked baggage (had too much stuff to
bring back to fit in just the one bag I brought out with me). While it won't fit my
17" laptop, I have found another use for it. My wife's birthday was on Friday, and
has been wanting a nice backpack for her new job, so guess what she got for her birthday?
What can I say, I love my wife, and the fact that she is perfectly happy getting my
conference backpack as her "gift" :)
&lt;/p&gt;
&lt;p&gt;
I found great value in the key note presentation by John Fontanella, as well as good
value in some of the other presentations. Specially, Cathexis, Freedom Shopping and
Impinj. There was one thing lacking, and that was what we can expect from the next
version of BizTalk RFID. A member of the Xterprise team did let a little piece of
information slip which definetly caught my attention, and that was that the next version
is going to have features for mobile devices (ka-ching). Also, a display showing off
BizTalk RFID was strangely absent. Just because people attended the conference doesn't
mean they are going to make use of the product, and I think alot of people were there
to evaluate BizTalk RFID itself. Why not have a mock warehouse setup with some RFID
readers and label printers running off BizTalk RFID?
&lt;/p&gt;
&lt;p&gt;
Moving onto the training, I would like to say that I did learn a great deal of information.
The concept of developing a "solution" starting with the first lab exercise and continuing
to expand upon it for the duration of the class was an excellent idea and should be
used more often. Instead of wasting time watching progress bars advance, having an
environment already setup saved allot of time and allowed us to concentrate on actual
substance starting with the first lab. That first lab which showed were stuff was
installed, including log files, saved some time in later labs when I had to trouble
shoot. I would like to note that it always seems like BAM gets shafted in BizTalk
(and related classes), so I would almost like to see that brought forward for a change.
&lt;/p&gt;
&lt;p&gt;
There were some disclaimers stating that the code implemented was not up to best practice
standards. My question is, why isn't it? That is, why not show what best practice
code looks like? Maybe for the parts that we had to type our selves you could cut
some corners, but there were large portions of code that was done already for us that
could have been implemented better and had complete unit tests. It's a perfect opportunity
to show how to write decent code. Instead, the business type people and managers got
to see how "easy" it was to get stuff working. Mick did make a couple of statements
to try to avoid this incorrect conclusion, but I feel sorry for some poor developers
out there who will get a line like "I got it to work and I'm not even a developer". 
&lt;/p&gt;
&lt;p&gt;
While the physical RFID reader we got for use in the lab was nice, it did create an
issue with the solution we were developing. We really needed two RFID readers in order
for the solution (parking garage with an entry and exit ramp) to make more sense.
The retail price listed for the DLP-RFID1 is $119.95, but as you can see from this &lt;a href="http://www.trossenrobotics.com/store/c/2786-RFID-Readers.aspx"&gt;site&lt;/a&gt;,
there are several lower cost options available, which if bought in bulk, might allow
for 2 readers per student. Either that, or design a solution that only requires one
reader (either change the solution, or add additional processing logic to make the
solution work better with a single reader).
&lt;/p&gt;
&lt;p&gt;
The Microsoft Conference center was top notch, but I might have been biased by the
enormous cooler full of free beverages (soda, milk, juice). While I already mentioned
it once, it deserves a second mention, and that is the free shuttle that runs Monday
thru Friday from 7am to 8:30 PM between Lincoln Square (Westin Hotel in Bellevue)
and the Microsoft Campus. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=e481f5e7-ba94-4d51-975b-acdea904ec12" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,e481f5e7-ba94-4d51-975b-acdea904ec12.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=40a32ebe-ab15-4b59-8da8-66a35358ba22</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,40a32ebe-ab15-4b59-8da8-66a35358ba22.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,40a32ebe-ab15-4b59-8da8-66a35358ba22.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=40a32ebe-ab15-4b59-8da8-66a35358ba22</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today was the 2nd and last day of the training/conference on BizTalk RFID (See here
for Day <a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay0.aspx">0</a>, <a href="http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay1.aspx">1</a>, <a href="http://blog.salvoz.com/2008/02/20/BizTalkRFIDSolutionsDaysDay2.aspx">2</a>, <a href="http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay3.aspx">3</a>).
</p>
        <p>
          <strong>Module 7 - Business Rules</strong>
        </p>
        <p>
Now we're starting to get somewhere interesting, business rules. However, before I
could start the module, I needed to redo some previous steps as my VM was reset to
a clean state over night. Thankfully, as like other classes I've been to, solution
files are provided for each module, so I started more or less from module 6. 
</p>
        <p>
One step of my rebuild process I wanted to point out was importing a process. In Module
5 and 6 we were working with a process called Parking Event, so I went to import this
process in the BizTalk RFID manager. The import process asks for a XML file which
specifies the configuration for the process. Now this was imported successfully, but
when I went to validate I got a FileNotFound exception, and as I expected, the import
process does not import/move the necessary binary files. 
</p>
        <p>
Under the BizTalk RFID folder, is a Processes folder which has a folder for each process
configured. The import process created a ParkingEntry folder (C:\Program Files\Microsoft
BizTalk RFID\Processes\Parking Entry) and other required files, but the bin folder
was empty. All I had to do was copy my binary files (.dll's) from the solutions folder
to the bin folder, and the validation succeeded. 
</p>
        <p>
I am very grateful for module 2 (see <a href="http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay3.aspx">day
3</a>) in which we walked thru the folder structure of BizTalk RFID, as it made fixing
this error very easy. Now I will return you to our regularly scheduled Module 7.
</p>
        <p>
Due to some missing instructions in the Student Manual, we were instructed to use
the Business Rules deployment wizard to import a policy file which defined the rules
themselves. The rules are pretty simple for this exercise and this is more about BizTalk
RFID as a whole then how to manage BizTalk rules, worthy of it's own multi-day class.
</p>
        <p>
We also imported the Microsoft.Rfid.OobComponets assembly which contains several static
classes with useful utility functions. For this exercise, we make use of the RfidRuleEngineContext
class. I would recommend you review the <a href="http://msdn2.microsoft.com/en-us/library/microsoft.sensorservices.rfid.processcomponents.rfidruleenginecontext.aspx">MSDN
documentation</a> to familiarize yourself with the methods and properties exposed.
</p>
        <p>
My SQL server somehow got completely messed up, and I needed to take a break and fix
it before proceeding. I have posted a separate <a href="http://blog.salvoz.com/2008/02/21/RepairingSqlServerMsdbIndexErrorsAndSuspectDatabases.aspx">post</a> on
what happened and how I fixed it. 
</p>
        <p>
During the lecture portion of this module, Mick showed a simple example of invoking
the BizTalk rules engine directly from a .Net Application. You could easily expand
upon this idea to expose the BizTalk rules engine as a WCF service available to your
entire enterprise (service bus). Given the fact that the rules engine comes with the
branch edition of BizTalk which retails for $1800, this could very easily speed the
adoption of the BizTalk rules engine. 
</p>
        <p>
This raises an interesting decision, BizTalk rules or WF Rules. Previously I have
been looking primarily at the WF rules engine. I feel that it was a little easier
to use, and since it's freely including with .Net 3.0, it seems to have more community
support.
</p>
        <p>
          <strong>Module 8 - WCF Services</strong>
        </p>
        <p>
Module 8 involves sending tag data from BizTalk RFID to a Windows Forms application
via a WCF web service. To start off, we create a new custom event handler which invokes
the WCF service.  At this point I really started to understand the power behind
the process and event handler model that BizTalk RFID is built on. The WCF event handler
uses a standard WCF service proxy to invoke the service, and is setup to use the TagReadEvent
as the sole parameter to the method call. 
</p>
        <p>
This is an important design decision to point out. Instead of creating a new data
contract, you use the TagReadEvent which "everyone" should know how to use. A question
I have is, what other objects are setup for use as DataContracts, and are there any
predefined ServiceContracts defined for exposing services?
</p>
        <p>
The TagReadEvent object is passed to the Windows Forms Application, and a new key
is added to VendorSpecificData and is returned to the caller. The caller, if you remember,
is our custom event handler, which returns the modified TagReadEvent which in turn,
makes that object available in downstream event handlers.
</p>
        <p>
Again, I have come to realize some of the potential available in BizTalk RFID. However,
after spending the past 2 hours working on this module, I have come to the conclusion
that BizTalk RFID is as finicky as BizTalk proper, and requires some serious debugging
skills. The problem, 'IN' versus 'IN        
'. Somewhere I was getting extra spaces (probably from the database and the way we
are reading) which was causing havoc with my rules, or rather in how I expected the
rules to evaluate. I went back to one of the previous labs and modified the assembly
which handled looking up data from our simulated LOB database to trim strings.
</p>
        <p>
One other note, it looks like if you replace files in bin, or modify the web.config
file, the process will automatically restart, and log the reason and a stack trace
to shutdowns.log.
</p>
        <p>
The good news is that there is some decent troubleshooting facilities available using
the built in logging mechanism. This was how I was at least able to see where my problem
was. Log files for processes are stored in the Process Folder, and are named [ProcessName].log.
</p>
        <p>
          <strong>Module 9 - BAM</strong>
        </p>
        <p>
Someday I will sit down and figure out what BAM is all about, but it wasn't today.
Class was pretty much cut short due to people flying out today instead of tomorrow. 
</p>
        <p>
          <strong>Miscellaneous Notes</strong>
        </p>
        <ul>
          <li>
Enriching Data: This is a term used to define a process by which you take the raw
tag id and add additional data from your LOB database for example. This information
was usually added to the VendorSpecificData property bag which is a property of TagReadEvent
and was covered in Module 6. 
</li>
          <li>
Device Simulator: c:\Program Files\Microsoft BizTalk RFID\Samples\Device Service Provider\Contoso\ContosoEndToEnd\ContosoDeviceSimulator</li>
          <ul>
            <li>
There is other stuff in the Samples folder so check it out. 
</li>
          </ul>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=40a32ebe-ab15-4b59-8da8-66a35358ba22" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk RFID Solution Days - Day 4</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,40a32ebe-ab15-4b59-8da8-66a35358ba22.aspx</guid>
      <link>http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay4.aspx</link>
      <pubDate>Thu, 21 Feb 2008 23:37:04 GMT</pubDate>
      <description>&lt;p&gt;
Today was the 2nd and last day of the training/conference on BizTalk RFID (See here
for Day &lt;a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay0.aspx"&gt;0&lt;/a&gt;, &lt;a href="http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay1.aspx"&gt;1&lt;/a&gt;, &lt;a href="http://blog.salvoz.com/2008/02/20/BizTalkRFIDSolutionsDaysDay2.aspx"&gt;2&lt;/a&gt;, &lt;a href="http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay3.aspx"&gt;3&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Module 7 - Business Rules&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Now we're starting to get somewhere interesting, business rules. However, before I
could start the module, I needed to redo some previous steps as my VM was reset to
a clean state over night. Thankfully, as like other classes I've been to, solution
files are provided for each module, so I started more or less from module 6. 
&lt;/p&gt;
&lt;p&gt;
One step of my rebuild process I wanted to point out was importing a process. In Module
5 and 6 we were working with a process called Parking Event, so I went to import this
process in the BizTalk RFID manager. The import process asks for a XML file which
specifies the configuration for the process. Now this was imported successfully, but
when I went to validate I got a FileNotFound exception, and as I expected, the import
process does not import/move the necessary binary files. 
&lt;/p&gt;
&lt;p&gt;
Under the BizTalk RFID folder, is a Processes folder which has a folder for each process
configured. The import process created a ParkingEntry folder (C:\Program Files\Microsoft
BizTalk RFID\Processes\Parking Entry) and other required files, but the bin folder
was empty. All I had to do was copy my binary files (.dll's) from the solutions folder
to the bin folder, and the validation succeeded. 
&lt;/p&gt;
&lt;p&gt;
I am very grateful for module 2 (see &lt;a href="http://blog.salvoz.com/2008/02/21/BizTalkRFIDSolutionDaysDay3.aspx"&gt;day
3&lt;/a&gt;) in which we walked thru the folder structure of BizTalk RFID, as it made fixing
this error very easy. Now I will return you to our regularly scheduled Module 7.
&lt;/p&gt;
&lt;p&gt;
Due to some missing instructions in the Student Manual, we were instructed to use
the Business Rules deployment wizard to import a policy file which defined the rules
themselves. The rules are pretty simple for this exercise and this is more about BizTalk
RFID as a whole then how to manage BizTalk rules, worthy of it's own multi-day class.
&lt;/p&gt;
&lt;p&gt;
We also imported the Microsoft.Rfid.OobComponets assembly which contains several static
classes with useful utility functions. For this exercise, we make use of the RfidRuleEngineContext
class. I would recommend you review the &lt;a href="http://msdn2.microsoft.com/en-us/library/microsoft.sensorservices.rfid.processcomponents.rfidruleenginecontext.aspx"&gt;MSDN
documentation&lt;/a&gt; to familiarize yourself with the methods and properties exposed.
&lt;/p&gt;
&lt;p&gt;
My SQL server somehow got completely messed up, and I needed to take a break and fix
it before proceeding. I have posted a separate &lt;a href="http://blog.salvoz.com/2008/02/21/RepairingSqlServerMsdbIndexErrorsAndSuspectDatabases.aspx"&gt;post&lt;/a&gt; on
what happened and how I fixed it. 
&lt;/p&gt;
&lt;p&gt;
During the lecture portion of this module, Mick showed a simple example of invoking
the BizTalk rules engine directly from a .Net Application. You could easily expand
upon this idea to expose the BizTalk rules engine as a WCF service available to your
entire enterprise (service bus). Given the fact that the rules engine comes with the
branch edition of BizTalk which retails for $1800, this could very easily speed the
adoption of the BizTalk rules engine. 
&lt;/p&gt;
&lt;p&gt;
This raises an interesting decision, BizTalk rules or WF Rules. Previously I have
been looking primarily at the WF rules engine. I feel that it was a little easier
to use, and since it's freely including with .Net 3.0, it seems to have more community
support.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Module 8 - WCF Services&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Module 8 involves sending tag data from BizTalk RFID to a Windows Forms application
via a WCF web service. To start off, we create a new custom event handler which invokes
the WCF service.&amp;nbsp; At this point I really started to understand the power behind
the process and event handler model that BizTalk RFID is built on. The WCF event handler
uses a standard WCF service proxy to invoke the service, and is setup to use the TagReadEvent
as the sole parameter to the method call. 
&lt;/p&gt;
&lt;p&gt;
This is an important design decision to point out. Instead of creating a new data
contract, you use the TagReadEvent which "everyone" should know how to use. A question
I have is, what other objects are setup for use as DataContracts, and are there any
predefined ServiceContracts defined for exposing services?
&lt;/p&gt;
&lt;p&gt;
The TagReadEvent object is passed to the Windows Forms Application, and a new key
is added to VendorSpecificData and is returned to the caller. The caller, if you remember,
is our custom event handler, which returns the modified TagReadEvent which in turn,
makes that object available in downstream event handlers.
&lt;/p&gt;
&lt;p&gt;
Again, I have come to realize some of the potential available in BizTalk RFID. However,
after spending the past 2 hours working on this module, I have come to the conclusion
that BizTalk RFID is as finicky as BizTalk proper, and requires some serious debugging
skills. The problem, 'IN' versus 'IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
'. Somewhere I was getting extra spaces (probably from the database and the way we
are reading) which was causing havoc with my rules, or rather in how I expected the
rules to evaluate. I went back to one of the previous labs and modified the assembly
which handled looking up data from our simulated LOB database to trim strings.
&lt;/p&gt;
&lt;p&gt;
One other note, it looks like if you replace files in bin, or modify the web.config
file, the process will automatically restart, and log the reason and a stack trace
to shutdowns.log.
&lt;/p&gt;
&lt;p&gt;
The good news is that there is some decent troubleshooting facilities available using
the built in logging mechanism. This was how I was at least able to see where my problem
was. Log files for processes are stored in the Process Folder, and are named [ProcessName].log.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Module 9 - BAM&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Someday I will sit down and figure out what BAM is all about, but it wasn't today.
Class was pretty much cut short due to people flying out today instead of tomorrow. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Miscellaneous Notes&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Enriching Data: This is a term used to define a process by which you take the raw
tag id and add additional data from your LOB database for example. This information
was usually added to the VendorSpecificData property bag which is a property of TagReadEvent
and was covered in Module 6. 
&lt;li&gt;
Device Simulator: c:\Program Files\Microsoft BizTalk RFID\Samples\Device Service Provider\Contoso\ContosoEndToEnd\ContosoDeviceSimulator&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
There is other stuff in the Samples folder so check it out. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=40a32ebe-ab15-4b59-8da8-66a35358ba22" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,40a32ebe-ab15-4b59-8da8-66a35358ba22.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=d13d131e-e4de-4ee5-a7cc-ab950135a25c</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,d13d131e-e4de-4ee5-a7cc-ab950135a25c.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,d13d131e-e4de-4ee5-a7cc-ab950135a25c.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d13d131e-e4de-4ee5-a7cc-ab950135a25c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today was the first day of the training portion of BizTalk RFID solution days (see
day <a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay0.aspx">0</a>, <a href="http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay1.aspx">1</a> and <a href="http://blog.salvoz.com/2008/02/20/BizTalkRFIDSolutionsDaysDay2.aspx">2</a>).
The instructors are <a href="http://blogs.breezetraining.com.au/mickb/">Mick Badran</a> of <a href="http://www.breezetraining.com.au/site/">Breeze
Training</a>, and Ram Venkatesh from S3 Edge (Ram was the software architect for BizTalk
RFID and recently left Microsoft). The class is held on the Microsoft Campus in the
Conference Center, Building #33. This is my first time at Microsoft and I'm impressed
with the campus so far.
</p>
        <p>
We started out with the obligatory introductions and moved right into the student
manual to go over the agenda for the class. We will be designing a solution for a
"parking garage" with enough features to get a good understanding of BizTalk RFID.
Similar to other classes I have taken, we will be using virtual machines for the labs,
and there are already completed solution files for each lab. We have been provided
with a HF (13.56 Mhz) <a href="http://www.dlpdesign.com/rf/rfid1.shtml">RFID reader</a> from
DLP Design to use in the labs and to take home with us.
</p>
        <p>
          <strong>Module 1 - Introduction to RFID and BizTalk RFID</strong>
        </p>
        <p>
This was an introduction to RFID, RFID technologies and BizTalk RFID. The first couple
of slides were designed to make sure everyone had at least a basic understanding of
RFID. I would wager that this was review for most people. The remaining slides went
into an overview of BizTalk RFID.
</p>
        <p>
RFID Tags:
</p>
        <ul>
          <li>
Low (&lt; 135 Khz) - Short range, more reliable for liquids and metals 
</li>
          <li>
High (13.56 MHz) - Short range, less expensive, reliable, slow bps 
</li>
          <li>
UHF (868 to 915MHz) - Good balance between range and performance and pretty cheap. 
</li>
          <li>
Microwave (2.45 GHz, 5.8 GHz) - Fast but expensive. Example is highway tolls.</li>
        </ul>
        <p>
Microsoft RFID Goals:
</p>
        <ul>
          <li>
Encourage widespread RFID adoption 
<ul><li>
Standards 
</li><li>
Best Practices Architecture</li></ul></li>
          <li>
Build an RFID infrastructure 
<ul><li>
Event Processing 
</li><li>
Device Abstraction and Management</li></ul></li>
        </ul>
        <p>
Key Benefits of BizTalk RFID:
</p>
        <ul>
          <li>
Abstraction of device handling 
</li>
          <li>
Rich RFID event processing model 
</li>
          <li>
Reduce data "noise" and increase data relevancy - Use the BRE to create filters, alerts
and transformations 
</li>
          <li>
Robust framework to support agile processes</li>
        </ul>
        <p>
Additional Notes:
</p>
        <ul>
          <li>
The DSPI has both an application and management contract interface. 
</li>
          <li>
Ram brought up the <a href="http://www.llrp.org/">LLRP</a> in response to a question
about standards based protocols between hosts and RFID readers. I talked briefly about
this in my <a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay0.aspx">Day
0</a> post. LLRP is a EPC standard, and I would expect to see more and more readers
beginning to implement this. As such, it should be pretty easy to find a DSPI that
will work with multiple readers. I know Impinj is using LLRP, or is planning to. 
</li>
        </ul>
        <p>
          <strong>Module 2 - Installing BizTalk RFID Services</strong>
        </p>
        <p>
The student manual contains some basic slides on minimum requirements and installation
stuff. Nothing really exciting there. The lab was very interesting and provided some
great information. Instead of having you waste an hour installing BizTalk RFID, the
VM comes pre-loaded with it already. The lab focuses on showing you where things are
installed, command line tools, configuration, registry settings, etc. 
</p>
        <ul>
          <li>
Default install directory is %Program Files%\Microsoft BizTalk RFID\bin, I will refer
to this as %App%. 
</li>
          <li>
It looks like everything you can do in the RFID Manager MMC, you can do from the command
line RFIDClientConsole in %App%\Bin 
<ul><li>
We were shown how to export the server configuration to XML and and import from xml.</li></ul></li>
          <li>
Server listens on port 7891 
</li>
          <li>
Notable stuff in %App%\Bin 
<ul><li>
clusrfid.vbs - Script that returns health of BizTalk RFID service 
</li><li>
RfidServices.exe - Main application which run as a service 
</li><li>
RfidTray.exe - Monitoring utility which runs in the SysTray 
</li><li>
Web.Config - Mainly defines WCF configuration</li></ul></li>
          <li>
Registry 
<ul><li>
HKLM\Software\Microsoft\Microsoft BizTalk RFID 
</li><li>
HKLM\Software\Microsoft\Business Rules\3.0 - Added a key called StaticSupport to allow
us to call static classes from rules. See <a title="http://msdn2.microsoft.com/en-us/library/aa950269.aspx" href="http://msdn2.microsoft.com/en-us/library/aa950269.aspx">http://msdn2.microsoft.com/en-us/library/aa950269.aspx</a> for
more details.</li></ul></li>
        </ul>
        <p>
          <strong>Module 3 - Examining Physical Devices</strong>
        </p>
        <p>
This module was focused around an introduction to the DLP Design's RFID1 HF reader.
We setup the USB redirector software which will enable us to connect to the USB based
reader in our VM for all future labs. We were also supposed to write a .Net Application
using the native drivers in order to illustrate how difficult it is to program devices.
I decided to skip that example and move onto lab 4.
</p>
        <p>
          <strong>Module 4 - BizTalk RFID Device Providers</strong>
        </p>
        <p>
This was a pretty easy module where we went thru, registered a provider and established
a connection to our DLP RFID1 device thru BizTalk RFID. A sample application was written
to "register" a customer with a RFID tag for use in our parking garage solution. So
far so good, so far so-so. I would have preferred writing the provider versus the
.Net application. 
</p>
        <p>
An extra lab was provided in this module which showcases the "flexibility" of the
provider model. The extra lab implements a file system provider, that is, it "reads
tags" from the file system. Basically the tags are just files in side a directory
tree. I don't remember the exact story told, but apparently a race team wanted to
be able to capture sensor data from a race car. Looking at how the example is implemented,
it's trying to force the solution in the BizTalk RFID domain (square peg into a round
hole). Don't get me wrong, it's a cool implementation, but it just doesn't seem right.
</p>
        <p>
          <strong>Module 5 - Building BizTalk RFID Processes</strong>
        </p>
        <p>
Processes are respond to events raised by devices in an asynchronous manner. In the
lab we created a process that dumped event data into a sql database. This is out of
the box functionality and was pretty easy to configure and setup. Once that was done,
we created a very simple report in reporting services. 
</p>
        <p>
          <strong>Module 6 - Custom Event Handlers</strong>
        </p>
        <p>
One thing you would notice if you were completing module 5 yourself, is that while
the storing of data to SQL is powerful, as implemented, it wasn't practical. You stored
pretty much the same tag read data 100 times by just holding one of the test tags
up to the reader for 1-2 seconds. This is were custom event handlers come in. 
</p>
        <p>
From the student manual, lab 6, custom event handlers can:
</p>
        <ul>
          <li>
Filter duplicate events (terminate event processing) 
</li>
          <li>
Enrich events with custom data 
</li>
          <li>
Cleanse event data before further processing takes place 
</li>
          <li>
Integrate with downstream processes and services</li>
          <ul>
            <li>
Insert tag events into a database and/or call a downstream service.</li>
          </ul>
        </ul>
        <p>
All of the out of the box functionality in BizTalk RFID at the process level is implemented
on top of the EventHanlder model. This model is fully exposed as indicated in this
module, and is the supported way to add additional functionality. There are some samples
in the SDK and a Code Plex project started by Microsoft with additional event handlers
(MSMQ, File, etc).  
</p>
        <p>
In this lab we created a custom event handler component, add the custom component
to an existing BizTalk RFID process and finally explore the use of the Import Process
feature. Again, the programming was pretty straight forward. Naturally the incorporation
of DAL code in my component brought a frown to my face. While I understand this is
just a simple lab, since the DAL code was already written for us, adding it as a separate
assembly to promote n-tier design would have been welcome. 
</p>
        <p>
I finished up the lab with my tag read events getting queued into a Message Queue
after getting enriched (matching tag Id to customer information in our customer DB).
Now I'm sure we'll get to this at some point, but I wanted to go a step further so
I implemented a simple CBR scheme in BizTalk to dump the data to a file location. 
</p>
        <p>
          <strong>Miscellaneous Notes</strong>
        </p>
        <ul>
          <li>
BizTalk RFID server uses MSMQ for "routing" events to processes 
</li>
          <li>
What is ALE - Application Level Events, part of the EPIC standard? A way to publish
and subscribe events. Doesn't sound like there is ALE support out of the box, you
would have to roll your own. 
</li>
          <li>
Using a piece of 3rd party software called USB Redirector to bridge the USB based
reader plugged into the physical host to the VM. 
</li>
          <li>
Review functionality of BizTalk branch edition. It's only $1800 retail down from $8500
retail. 
</li>
          <li>
There is a device simulator in the full SDK of BizTalk RFID. 
</li>
          <li>
Computer Specs used in the class: 
<ul><li>
Dell Optiplex 745 (Vista Experience rating of 4.5) 
</li><li>
Intel Core 2 - T6600 @ 2.4 Ghz 
</li><li>
3 GB of RAM 
</li><li>
ATI X1650</li></ul></li>
        </ul>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=d13d131e-e4de-4ee5-a7cc-ab950135a25c" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk RFID Solution Days - Day 3</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,d13d131e-e4de-4ee5-a7cc-ab950135a25c.aspx</guid>
      <link>http://blog.salvoz.com/2008/02/20/BizTalkRFIDSolutionDaysDay3.aspx</link>
      <pubDate>Wed, 20 Feb 2008 05:32:34 GMT</pubDate>
      <description>&lt;p&gt;
Today was the first day of the training portion of BizTalk RFID solution days (see
day &lt;a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay0.aspx"&gt;0&lt;/a&gt;, &lt;a href="http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay1.aspx"&gt;1&lt;/a&gt; and &lt;a href="http://blog.salvoz.com/2008/02/20/BizTalkRFIDSolutionsDaysDay2.aspx"&gt;2&lt;/a&gt;).
The instructors are &lt;a href="http://blogs.breezetraining.com.au/mickb/"&gt;Mick Badran&lt;/a&gt; of &lt;a href="http://www.breezetraining.com.au/site/"&gt;Breeze
Training&lt;/a&gt;, and Ram Venkatesh from S3 Edge (Ram was the software architect for BizTalk
RFID and recently left Microsoft). The class is held on the Microsoft Campus in the
Conference Center, Building #33. This is my first time at Microsoft and I'm impressed
with the campus so far.
&lt;/p&gt;
&lt;p&gt;
We started out with the obligatory introductions and moved right into the student
manual to go over the agenda for the class. We will be designing a solution for a
"parking garage" with enough features to get a good understanding of BizTalk RFID.
Similar to other classes I have taken, we will be using virtual machines for the labs,
and there are already completed solution files for each lab. We have been provided
with a HF (13.56 Mhz) &lt;a href="http://www.dlpdesign.com/rf/rfid1.shtml"&gt;RFID reader&lt;/a&gt; from
DLP Design to use in the labs and to take home with us.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Module 1 - Introduction to RFID and BizTalk RFID&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This was an introduction to RFID, RFID technologies and BizTalk RFID. The first couple
of slides were designed to make sure everyone had at least a basic understanding of
RFID. I would wager that this was review for most people. The remaining slides went
into an overview of BizTalk RFID.
&lt;/p&gt;
&lt;p&gt;
RFID Tags:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Low (&amp;lt; 135 Khz) - Short range, more reliable for liquids and metals 
&lt;li&gt;
High (13.56 MHz) - Short range, less expensive, reliable, slow bps 
&lt;li&gt;
UHF (868 to 915MHz) - Good balance between range and performance and pretty cheap. 
&lt;li&gt;
Microwave (2.45 GHz, 5.8 GHz) - Fast but expensive. Example is highway tolls.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Microsoft RFID Goals:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Encourage widespread RFID adoption 
&lt;ul&gt;
&lt;li&gt;
Standards 
&lt;li&gt;
Best Practices Architecture&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Build an RFID infrastructure 
&lt;ul&gt;
&lt;li&gt;
Event Processing 
&lt;li&gt;
Device Abstraction and Management&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Key Benefits of BizTalk RFID:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Abstraction of device handling 
&lt;li&gt;
Rich RFID event processing model 
&lt;li&gt;
Reduce data "noise" and increase data relevancy - Use the BRE to create filters, alerts
and transformations 
&lt;li&gt;
Robust framework to support agile processes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Additional Notes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The DSPI has both an application and management contract interface. 
&lt;li&gt;
Ram brought up the &lt;a href="http://www.llrp.org/"&gt;LLRP&lt;/a&gt; in response to a question
about standards based protocols between hosts and RFID readers. I talked briefly about
this in my &lt;a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay0.aspx"&gt;Day
0&lt;/a&gt; post. LLRP is a EPC standard, and I would expect to see more and more readers
beginning to implement this. As such, it should be pretty easy to find a DSPI that
will work with multiple readers. I know Impinj is using LLRP, or is planning to. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Module 2 - Installing BizTalk RFID Services&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The student manual contains some basic slides on minimum requirements and installation
stuff. Nothing really exciting there. The lab was very interesting and provided some
great information. Instead of having you waste an hour installing BizTalk RFID, the
VM comes pre-loaded with it already. The lab focuses on showing you where things are
installed, command line tools, configuration, registry settings, etc. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Default install directory is %Program Files%\Microsoft BizTalk RFID\bin, I will refer
to this as %App%. 
&lt;li&gt;
It looks like everything you can do in the RFID Manager MMC, you can do from the command
line RFIDClientConsole in %App%\Bin 
&lt;ul&gt;
&lt;li&gt;
We were shown how to export the server configuration to XML and and import from xml.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Server listens on port 7891 
&lt;li&gt;
Notable stuff in %App%\Bin 
&lt;ul&gt;
&lt;li&gt;
clusrfid.vbs - Script that returns health of BizTalk RFID service 
&lt;li&gt;
RfidServices.exe - Main application which run as a service 
&lt;li&gt;
RfidTray.exe - Monitoring utility which runs in the SysTray 
&lt;li&gt;
Web.Config - Mainly defines WCF configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Registry 
&lt;ul&gt;
&lt;li&gt;
HKLM\Software\Microsoft\Microsoft BizTalk RFID 
&lt;li&gt;
HKLM\Software\Microsoft\Business Rules\3.0 - Added a key called StaticSupport to allow
us to call static classes from rules. See &lt;a title="http://msdn2.microsoft.com/en-us/library/aa950269.aspx" href="http://msdn2.microsoft.com/en-us/library/aa950269.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa950269.aspx&lt;/a&gt; for
more details.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Module 3 - Examining Physical Devices&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This module was focused around an introduction to the DLP Design's RFID1 HF reader.
We setup the USB redirector software which will enable us to connect to the USB based
reader in our VM for all future labs. We were also supposed to write a .Net Application
using the native drivers in order to illustrate how difficult it is to program devices.
I decided to skip that example and move onto lab 4.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Module 4 - BizTalk RFID Device Providers&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This was a pretty easy module where we went thru, registered a provider and established
a connection to our DLP RFID1 device thru BizTalk RFID. A sample application was written
to "register" a customer with a RFID tag for use in our parking garage solution. So
far so good, so far so-so. I would have preferred writing the provider versus the
.Net application. 
&lt;/p&gt;
&lt;p&gt;
An extra lab was provided in this module which showcases the "flexibility" of the
provider model. The extra lab implements a file system provider, that is, it "reads
tags" from the file system. Basically the tags are just files in side a directory
tree. I don't remember the exact story told, but apparently a race team wanted to
be able to capture sensor data from a race car. Looking at how the example is implemented,
it's trying to force the solution in the BizTalk RFID domain (square peg into a round
hole). Don't get me wrong, it's a cool implementation, but it just doesn't seem right.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Module 5 - Building BizTalk RFID Processes&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Processes are respond to events raised by devices in an asynchronous manner. In the
lab we created a process that dumped event data into a sql database. This is out of
the box functionality and was pretty easy to configure and setup. Once that was done,
we created a very simple report in reporting services. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Module 6 - Custom Event Handlers&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
One thing you would notice if you were completing module 5 yourself, is that while
the storing of data to SQL is powerful, as implemented, it wasn't practical. You stored
pretty much the same tag read data 100 times by just holding one of the test tags
up to the reader for 1-2 seconds. This is were custom event handlers come in. 
&lt;/p&gt;
&lt;p&gt;
From the student manual, lab 6, custom event handlers can:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Filter duplicate events (terminate event processing) 
&lt;li&gt;
Enrich events with custom data 
&lt;li&gt;
Cleanse event data before further processing takes place 
&lt;li&gt;
Integrate with downstream processes and services&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Insert tag events into a database and/or call a downstream service.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;
All of the out of the box functionality in BizTalk RFID at the process level is implemented
on top of the EventHanlder model. This model is fully exposed as indicated in this
module, and is the supported way to add additional functionality. There are some samples
in the SDK and a Code Plex project started by Microsoft with additional event handlers
(MSMQ, File, etc).&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
In this lab we created a custom event handler component, add the custom component
to an existing BizTalk RFID process and finally explore the use of the Import Process
feature. Again, the programming was pretty straight forward. Naturally the incorporation
of DAL code in my component brought a frown to my face. While I understand this is
just a simple lab, since the DAL code was already written for us, adding it as a separate
assembly to promote n-tier design would have been welcome. 
&lt;/p&gt;
&lt;p&gt;
I finished up the lab with my tag read events getting queued into a Message Queue
after getting enriched (matching tag Id to customer information in our customer DB).
Now I'm sure we'll get to this at some point, but I wanted to go a step further so
I implemented a simple CBR scheme in BizTalk to dump the data to a file location. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Miscellaneous Notes&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
BizTalk RFID server uses MSMQ for "routing" events to processes 
&lt;li&gt;
What is ALE - Application Level Events, part of the EPIC standard? A way to publish
and subscribe events. Doesn't sound like there is ALE support out of the box, you
would have to roll your own. 
&lt;li&gt;
Using a piece of 3rd party software called USB Redirector to bridge the USB based
reader plugged into the physical host to the VM. 
&lt;li&gt;
Review functionality of BizTalk branch edition. It's only $1800 retail down from $8500
retail. 
&lt;li&gt;
There is a device simulator in the full SDK of BizTalk RFID. 
&lt;li&gt;
Computer Specs used in the class: 
&lt;ul&gt;
&lt;li&gt;
Dell Optiplex 745 (Vista Experience rating of 4.5) 
&lt;li&gt;
Intel Core 2 - T6600 @ 2.4 Ghz 
&lt;li&gt;
3 GB of RAM 
&lt;li&gt;
ATI X1650&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=d13d131e-e4de-4ee5-a7cc-ab950135a25c" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,d13d131e-e4de-4ee5-a7cc-ab950135a25c.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=47cb337d-92ec-499b-93bf-3507b33cd14b</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,47cb337d-92ec-499b-93bf-3507b33cd14b.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,47cb337d-92ec-499b-93bf-3507b33cd14b.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=47cb337d-92ec-499b-93bf-3507b33cd14b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today was the second day of the conference and it started out on the same foot as
the end of <a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay1.aspx">the
first day</a>. While there were two official tracks, the 3rd track consisting of talking
to the vendors, seemed to draw as many people as the presentations themselves. 
</p>
        <p>
The first 3 presentations were:
</p>
        <blockquote>
          <p>
            <a href="http://www.augustasystems.com/">Augusta Systems</a>
          </p>
          <p>
This presentation talked mainly about their sensor bridge, a piece of hardware which
allows you to connect multiple devices and peripherals to the sensor bridge. The Sensor
bridge was then the only piece of middleware you had to deal with in terms of application
and communication support.
</p>
        </blockquote>
        <blockquote>
          <p>
            <a href="http://www.lowrycomputer.com/">Lowry</a>
          </p>
          <p>
The presenter stated that he wasn't going to do a sales pitch, I think he ended up
doing so anyway. At one point there was a slide which talked about the challenges
an adopter of RFID must face which included: What labels and tags to use; where to
apply the labels and tags; what hardware to use; compliance standards set by DoD and
Wal-Mart. Of course Lowry can help you address all that. At the end, there was a slide
with all the customers of Lowry, and an audience member was from one of the companies
and asked what Lowry did for them. The presenter had no idea. Note to presenters,
make sure you can talk about the stuff you put on your slides. 
</p>
          <p>
            <a href="http://www.averydennison.com/">Avery Dennison</a>
          </p>
          <p>
Avery Dennison talked about a solution they implemented for a supplier of Boeing in
order to drive RFID down from the Tier 1 suppliers to the Tier 2 and beyond. They
also touched on their customer focused initiatives which include RFID FastTrax (RFID
process improvement and consulting), and their RFID System laboratory.
</p>
        </blockquote>
        <p>
          <strong>Freedom Shopping</strong>
        </p>
        <p>
The lunch time presentation was done by <a href="http://www.freedomshopping.com/mainlogin.asp?test=1">Freedom
Shopping</a>, who have implemented an RFID retail POS solution to allow for unmanned
stores. I was impressed by the presentation and solution presented by Freedom Shopping. 
</p>
        <p>
Freedom Shopping has 7 patents pending covering their RFID checkout process, and 2
"products".  The first is a turn key solution, which allows new store owners
to get up and running quickly. The second is an OEM solution which is more suited
for existing stores to slowly transition into RFID. 
</p>
        <p>
Some interesting facts I found out about their solution:
</p>
        <ul>
          <li>
Running Windows XP on their Kiosks. Their demo running at their booth was actually
running on Vista. 
</li>
          <li>
Retail cost of their Kiosk (I'm not sure if this is for the full or 1/2 size) is $20,000,
compared to $70,000 for a bar coded self service checkout 
</li>
          <li>
Mentioned the cost of their tags were around 13 cents and use a modified <a href="http://www.alientechnology.com/docs/CS_Freedom.pdf ">Alien
Squiggle</a></li>
          <li>
They are tagging everything in the store, down to a pack of gum which sells for 99
cents.</li>
        </ul>
        <p>
          <strong>Cathexis</strong>
        </p>
        <p>
After lunch I moved from the main room to the secondary room to hear <a href="http://www.cathexis.com/">Cathexis</a> talk
about their <a href="http://www.cathexis.com/applications/event-management.aspx">RFID-based
Event Management System</a>. The presenter was by far the best of the conference and
kept me interested from start to finish. While he was ultimately pitching thier product,
it really wasn't mentioned until 30 minutes in.  
</p>
        <p>
The presentation started off with the conclusion (first time I've seen that), which
had 4 points: Change Happens, Solutions are deigned to encourage specific attendee
behavior, Trend analysis is at the heart of finding ROA in RFID, Solutions are tailored
from small to large scenarios. Some of the benefits of their solution include: Real
time traffic management, real time notifications, automated floor traffic analysis,
promotions and data driven advertising. 
</p>
        <p>
Unfortunately I did not win the Xbox 360/Guitar Hero 3 combo they were giving away
(and I walked past their booth so much).
</p>
        <p>
          <strong>The End</strong>
        </p>
        <p>
The last presentation was by <a href="http://www.daenet.eu/eu/">Daenet</a>, a German
software company specializing in SOA, and RFID on a Microsoft Stack. They are also
a member of the <a href="https://www.vstsinnercircle.com/login/signin.aspx?ReturnUrl=%2f">VSTS
Inner Circle</a> which I had never heard of before. What I took away from this presentation,
was that my interpretation and implementation of SOA is shared by this company, which
means I'm probably getting it right. 
</p>
        <p>
Tomorrow starts the hands on training and I can't wait. We even get our very own RFID
reader to practice with and take home. I have no idea what time the class starts.
I got an email stating we were supposed to be informed at the conference, but I must
have missed that. I'm guessing we won't start before 8, so that's when I'll try to
get there.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=47cb337d-92ec-499b-93bf-3507b33cd14b" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk RFID Solutions Days - Day 2</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,47cb337d-92ec-499b-93bf-3507b33cd14b.aspx</guid>
      <link>http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay2.aspx</link>
      <pubDate>Tue, 19 Feb 2008 12:27:29 GMT</pubDate>
      <description>&lt;p&gt;
Today was the second day of the conference and it started out on the same foot as
the end of &lt;a href="http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay1.aspx"&gt;the
first day&lt;/a&gt;. While there were two official tracks, the 3rd track consisting of talking
to the vendors, seemed to draw as many people as the presentations themselves. 
&lt;/p&gt;
&lt;p&gt;
The first 3 presentations were:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;a href="http://www.augustasystems.com/"&gt;Augusta Systems&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This presentation talked mainly about their sensor bridge, a piece of hardware which
allows you to connect multiple devices and peripherals to the sensor bridge. The Sensor
bridge was then the only piece of middleware you had to deal with in terms of application
and communication support.
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
&lt;a href="http://www.lowrycomputer.com/"&gt;Lowry&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The presenter stated that he wasn't going to do a sales pitch, I think he ended up
doing so anyway. At one point there was a slide which talked about the challenges
an adopter of RFID must face which included: What labels and tags to use; where to
apply the labels and tags; what hardware to use; compliance standards set by DoD and
Wal-Mart. Of course Lowry can help you address all that. At the end, there was a slide
with all the customers of Lowry, and an audience member was from one of the companies
and asked what Lowry did for them. The presenter had no idea. Note to presenters,
make sure you can talk about the stuff you put on your slides. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.averydennison.com/"&gt;Avery Dennison&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Avery Dennison talked about a solution they implemented for a supplier of Boeing in
order to drive RFID down from the Tier 1 suppliers to the Tier 2 and beyond. They
also touched on their customer focused initiatives which include RFID FastTrax (RFID
process improvement and consulting), and their RFID System laboratory.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Freedom Shopping&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The lunch time presentation was done by &lt;a href="http://www.freedomshopping.com/mainlogin.asp?test=1"&gt;Freedom
Shopping&lt;/a&gt;, who have implemented an RFID retail POS solution to allow for unmanned
stores. I was impressed by the presentation and solution presented by Freedom Shopping. 
&lt;/p&gt;
&lt;p&gt;
Freedom Shopping has 7 patents pending covering their RFID checkout process, and 2
"products".&amp;nbsp; The first is a turn key solution, which allows new store owners
to get up and running quickly. The second is an OEM solution which is more suited
for existing stores to slowly transition into RFID. 
&lt;/p&gt;
&lt;p&gt;
Some interesting facts I found out about their solution:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Running Windows XP on their Kiosks. Their demo running at their booth was actually
running on Vista. 
&lt;li&gt;
Retail cost of their Kiosk (I'm not sure if this is for the full or 1/2 size) is $20,000,
compared to $70,000 for a bar coded self service checkout 
&lt;li&gt;
Mentioned the cost of their tags were around 13 cents and use a modified &lt;a href="http://www.alientechnology.com/docs/CS_Freedom.pdf "&gt;Alien
Squiggle&lt;/a&gt; 
&lt;li&gt;
They are tagging everything in the store, down to a pack of gum which sells for 99
cents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Cathexis&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
After lunch I moved from the main room to the secondary room to hear &lt;a href="http://www.cathexis.com/"&gt;Cathexis&lt;/a&gt; talk
about their &lt;a href="http://www.cathexis.com/applications/event-management.aspx"&gt;RFID-based
Event Management System&lt;/a&gt;. The presenter was by far the best of the conference and
kept me interested from start to finish. While he was ultimately pitching thier product,
it really wasn't mentioned until 30 minutes in.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
The presentation started off with the conclusion (first time I've seen that), which
had 4 points: Change Happens, Solutions are deigned to encourage specific attendee
behavior, Trend analysis is at the heart of finding ROA in RFID, Solutions are tailored
from small to large scenarios. Some of the benefits of their solution include: Real
time traffic management, real time notifications, automated floor traffic analysis,
promotions and data driven advertising. 
&lt;/p&gt;
&lt;p&gt;
Unfortunately I did not win the Xbox 360/Guitar Hero 3 combo they were giving away
(and I walked past their booth so much).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The End&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The last presentation was by &lt;a href="http://www.daenet.eu/eu/"&gt;Daenet&lt;/a&gt;, a German
software company specializing in SOA, and RFID on a Microsoft Stack. They are also
a member of the &lt;a href="https://www.vstsinnercircle.com/login/signin.aspx?ReturnUrl=%2f"&gt;VSTS
Inner Circle&lt;/a&gt; which I had never heard of before. What I took away from this presentation,
was that my interpretation and implementation of SOA is shared by this company, which
means I'm probably getting it right. 
&lt;/p&gt;
&lt;p&gt;
Tomorrow starts the hands on training and I can't wait. We even get our very own RFID
reader to practice with and take home. I have no idea what time the class starts.
I got an email stating we were supposed to be informed at the conference, but I must
have missed that. I'm guessing we won't start before 8, so that's when I'll try to
get there.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=47cb337d-92ec-499b-93bf-3507b33cd14b" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,47cb337d-92ec-499b-93bf-3507b33cd14b.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=ab98d295-8ca4-4de6-a0bb-25337241297d</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,ab98d295-8ca4-4de6-a0bb-25337241297d.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,ab98d295-8ca4-4de6-a0bb-25337241297d.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ab98d295-8ca4-4de6-a0bb-25337241297d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today marked the official start of the BizTalk RFID Solutions Days conference. Showing
up for the <a href="http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay0.aspx">pre-conference</a> reception
was a good idea as the registration table was packed in this morning. Breakfast, lunch,
afternoon snacks (including ice cream treats) and dinner were provided. There was
no free WiFi available. It is possible that if you had a room at the hotel that you
got access, but I saw plenty of people paying for WiFi though out the day.
</p>
        <p>
          <a href="http://blogs.msdn.com/biztalkrfid/archive/tags/Author+_3A00_+Anush+Kumar/default.aspx">Anush</a> opened
up the conference with a short welcoming presentation. His key point was that the
goal of BizTalk RFID was to make it as easy to hook up RFID hardware, as it was to
attach a mouse or other USB device. That is a pretty lofty goal, but from what I have
seen and read, they are well on their way to accomplishing this. I will be able to
comment more on this after I complete the training classes on Wednesday and Thursday.
</p>
        <p>
          <strong>Key Note</strong>
        </p>
        <p>
The keynote was delivered by John Fontanella from AMR Research, a company that specializes
in researching technology for it's customers. This was a very good presentation about
RFID as a technology, process and it's uses in business. John provided some good information
which indicates that RFID will really start growing in another year or two. 
</p>
        <p>
Like RFID, barcodes faced a slow adoption process, going back to 1975 where an article
in a grocery store industry magazine had a quote asking where the value was in barcodes.
Now barcodes are everywhere and I doubt my generation even remembers a world without
barcodes and from the numbers presented, we are headed the same with RFID.
</p>
        <p>
One of the key points in the presentation was a claim that we have reached the "tipping
point" of RFID, but that no one has really noticed yet. The evidence to support this
is as follows:
</p>
        <ul>
          <li>
AMR is seeing an increase in the number of RFID inquiries 
</li>
          <li>
Big Technology companies are back in the hunt for RFID solutions. Compare the list
of attendees at this years RFID Live conference with years past and you should see
an increase in large, well know companies 
</li>
          <li>
Not dependent on Wal-Mart. 
</li>
          <li>
Companies beginning to understand the value of RFID. In 1994, how many companies understood
the value of a corporate web site? 
</li>
          <li>
Large customer facing companies are starting to adopt RFID. An example I've seen,
and that was brought up by an audience member, is the Ford RFID enabled pickup truck
bed targeted at construction workers and companies. 
</li>
        </ul>
        <p>
Several slides in the presentation dealt with what is expected in the future, and
how it will continue to drive RFID. For example, item level tagging is supposed to
really take off starting in 2009, and one of the categories of targeted projects is
Point of Sale, which depends on item level tagging. <a href="http://www.tersosolutions.com">Terso</a> has
been doing item level tagging since it's inception a couple of years ago, so mass
customer acceptance and familiarity with item level tagging is a positive development. 
</p>
        <p>
John made a comment on how in today's supply chains in the United States, that we
have a 60 days supply worth of products, and that RFID and improved processes could
help reduce how much back stock is in the supply chain, thus increasing efficiency.
He asked if we really need a 60 days supply, and speculated we could get down to 7
days worth of back stock. 
</p>
        <p>
I actually find some re-assurance in that 60 day supply, as we are all extremely dependent
on these supply chains for our survival (we are not exactly a country of farmers anymore).
In the event of a wide spread terrorist attack or some kind of flu epidemic, that
2 months of supply chain back stock might actually equate to survival. Perhaps I've
watched one to many end of the world movies lately.
</p>
        <p>
          <strong>Charles Johnson from Microsoft</strong>
        </p>
        <p>
The highlight of this presentation was the movie that Charles showed at the beginning,
in which a product innovation was shown in an end to end solution starting with envisioning
to the end consumer. The video starts out showing a formula one race car being monitored
(Charles pointed out that Microsoft software is actually used in racing), and the
focus shifted to the driver's seat, which is the product that was going to be developed.
</p>
        <p>
The video changes to show a product management team working on a project plan on Microsoft <a href="http://www.microsoft.com/surface/">Surface</a>,
both mounted on the wall, as well as in the table. Now Charles said that what we were
seeing was real functioning software and hardware. <a href="http://www.microsoft.com/surface/">Surface</a> was
showcased through out the video. 
</p>
        <p>
Some other highlights from the video included wearable headsets which overlayed assembly
directions on the production line and RFID tracking of products, parts, and tools
in the factory. The video concluded showing a end-customer building (on-line) and
ordering a new car (which included the new seat), and the CEO using a Surface enabled
desk to review sales data.
</p>
        <p>
The rest of Charles's presentation was focused primarily on supply chain visibility
and highlighted some Microsoft partners and the solutions they had developed. Some
interesting things I picked up on was a hosted service provided by HP that allows
BizTalk to talk to SAP via web services, and it sounded like Microsoft used SAP internally
rather then Dynamics, but I'm not 100% sure on this.
</p>
        <p>
There was an audience question at the end asking about the cost of BizTalk server
(not the RFID version), and also commented that he thought it was too expensive. Charles
responded that when you look at a TCO across an entire solution, BizTalk is a small
portion of that. He also added that Microsoft is willing to work with companies to
define a pricing model that will work for them. 
</p>
        <p>
          <strong>Other</strong>
        </p>
        <p>
The rest of the presentations where done by some of the sponsors, and pretty much
turned into sales pitches and statistical bragging. It's amazing how many different
ways you can cut up the RFID solution space in order to claim you are a #1. While
there were foot notes on the slides to "independent" 3rd party research, no one used
the same company. Therefore, I will make the unsubstantiated claim that I am the number
one blogger at BizTalk RFID solution days based on a set of criteria only known to
me. 
</p>
        <p>
Companies presenting included <a href="http://www.xterprise.com/">Xterprise</a>, who
I thought was a systems integrator, but is actually a ISV, <a href="http://www.hp.com">HP</a>, <a href="http://www.motorola.com/">Motorola</a>,
and <a href="http://www.impinj.com/">Impinj</a>. To be fair, the HP presentation was
a 50/50 split between their implementation of RFID in manufacturing and supply chain
and their enterprise services department. The Impinj presentation wasn't too bad,
I liked the way they designed their firmware upgrades, and if their claims on power
consumption (27W active power) are true, that would have some benefits. 
</p>
        <p>
We'll see what Day 2 holds. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ab98d295-8ca4-4de6-a0bb-25337241297d" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk RFID Solutions Days - Day 1</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,ab98d295-8ca4-4de6-a0bb-25337241297d.aspx</guid>
      <link>http://blog.salvoz.com/2008/02/18/BizTalkRFIDSolutionsDaysDay1.aspx</link>
      <pubDate>Mon, 18 Feb 2008 10:51:38 GMT</pubDate>
      <description>&lt;p&gt;
Today marked the official start of the BizTalk RFID Solutions Days conference. Showing
up for the &lt;a href="http://blog.salvoz.com/2008/02/19/BizTalkRFIDSolutionsDaysDay0.aspx"&gt;pre-conference&lt;/a&gt; reception
was a good idea as the registration table was packed in this morning. Breakfast, lunch,
afternoon snacks (including ice cream treats) and dinner were provided. There was
no free WiFi available. It is possible that if you had a room at the hotel that you
got access, but I saw plenty of people paying for WiFi though out the day.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/biztalkrfid/archive/tags/Author+_3A00_+Anush+Kumar/default.aspx"&gt;Anush&lt;/a&gt; opened
up the conference with a short welcoming presentation. His key point was that the
goal of BizTalk RFID was to make it as easy to hook up RFID hardware, as it was to
attach a mouse or other USB device. That is a pretty lofty goal, but from what I have
seen and read, they are well on their way to accomplishing this. I will be able to
comment more on this after I complete the training classes on Wednesday and Thursday.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Key Note&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The keynote was delivered by John Fontanella from AMR Research, a company that specializes
in researching technology for it's customers. This was a very good presentation about
RFID as a technology, process and it's uses in business. John provided some good information
which indicates that RFID will really start growing in another year or two. 
&lt;/p&gt;
&lt;p&gt;
Like RFID, barcodes faced a slow adoption process, going back to 1975 where an article
in a grocery store industry magazine had a quote asking where the value was in barcodes.
Now barcodes are everywhere and I doubt my generation even remembers a world without
barcodes and from the numbers presented, we are headed the same with RFID.
&lt;/p&gt;
&lt;p&gt;
One of the key points in the presentation was a claim that we have reached the "tipping
point" of RFID, but that no one has really noticed yet. The evidence to support this
is as follows:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
AMR is seeing an increase in the number of RFID inquiries 
&lt;li&gt;
Big Technology companies are back in the hunt for RFID solutions. Compare the list
of attendees at this years RFID Live conference with years past and you should see
an increase in large, well know companies 
&lt;li&gt;
Not dependent on Wal-Mart. 
&lt;li&gt;
Companies beginning to understand the value of RFID. In 1994, how many companies understood
the value of a corporate web site? 
&lt;li&gt;
Large customer facing companies are starting to adopt RFID. An example I've seen,
and that was brought up by an audience member, is the Ford RFID enabled pickup truck
bed targeted at construction workers and companies. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Several slides in the presentation dealt with what is expected in the future, and
how it will continue to drive RFID. For example, item level tagging is supposed to
really take off starting in 2009, and one of the categories of targeted projects is
Point of Sale, which depends on item level tagging. &lt;a href="http://www.tersosolutions.com"&gt;Terso&lt;/a&gt; has
been doing item level tagging since it's inception a couple of years ago, so mass
customer acceptance and familiarity with item level tagging is a positive development. 
&lt;/p&gt;
&lt;p&gt;
John made a comment on how in today's supply chains in the United States, that we
have a 60 days supply worth of products, and that RFID and improved processes could
help reduce how much back stock is in the supply chain, thus increasing efficiency.
He asked if we really need a 60 days supply, and speculated we could get down to 7
days worth of back stock. 
&lt;/p&gt;
&lt;p&gt;
I actually find some re-assurance in that 60 day supply, as we are all extremely dependent
on these supply chains for our survival (we are not exactly a country of farmers anymore).
In the event of a wide spread terrorist attack or some kind of flu epidemic, that
2 months of supply chain back stock might actually equate to survival. Perhaps I've
watched one to many end of the world movies lately.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Charles Johnson from Microsoft&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The highlight of this presentation was the movie that Charles showed at the beginning,
in which a product innovation was shown in an end to end solution starting with envisioning
to the end consumer. The video starts out showing a formula one race car being monitored
(Charles pointed out that Microsoft software is actually used in racing), and the
focus shifted to the driver's seat, which is the product that was going to be developed.
&lt;/p&gt;
&lt;p&gt;
The video changes to show a product management team working on a project plan on Microsoft &lt;a href="http://www.microsoft.com/surface/"&gt;Surface&lt;/a&gt;,
both mounted on the wall, as well as in the table. Now Charles said that what we were
seeing was real functioning software and hardware. &lt;a href="http://www.microsoft.com/surface/"&gt;Surface&lt;/a&gt; was
showcased through out the video. 
&lt;/p&gt;
&lt;p&gt;
Some other highlights from the video included wearable headsets which overlayed assembly
directions on the production line and RFID tracking of products, parts, and tools
in the factory. The video concluded showing a end-customer building (on-line) and
ordering a new car (which included the new seat), and the CEO using a Surface enabled
desk to review sales data.
&lt;/p&gt;
&lt;p&gt;
The rest of Charles's presentation was focused primarily on supply chain visibility
and highlighted some Microsoft partners and the solutions they had developed. Some
interesting things I picked up on was a hosted service provided by HP that allows
BizTalk to talk to SAP via web services, and it sounded like Microsoft used SAP internally
rather then Dynamics, but I'm not 100% sure on this.
&lt;/p&gt;
&lt;p&gt;
There was an audience question at the end asking about the cost of BizTalk server
(not the RFID version), and also commented that he thought it was too expensive. Charles
responded that when you look at a TCO across an entire solution, BizTalk is a small
portion of that. He also added that Microsoft is willing to work with companies to
define a pricing model that will work for them. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Other&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The rest of the presentations where done by some of the sponsors, and pretty much
turned into sales pitches and statistical bragging. It's amazing how many different
ways you can cut up the RFID solution space in order to claim you are a #1. While
there were foot notes on the slides to "independent" 3rd party research, no one used
the same company. Therefore, I will make the unsubstantiated claim that I am the number
one blogger at BizTalk RFID solution days based on a set of criteria only known to
me. 
&lt;/p&gt;
&lt;p&gt;
Companies presenting included &lt;a href="http://www.xterprise.com/"&gt;Xterprise&lt;/a&gt;, who
I thought was a systems integrator, but is actually a ISV, &lt;a href="http://www.hp.com"&gt;HP&lt;/a&gt;, &lt;a href="http://www.motorola.com/"&gt;Motorola&lt;/a&gt;,
and &lt;a href="http://www.impinj.com/"&gt;Impinj&lt;/a&gt;. To be fair, the HP presentation was
a 50/50 split between their implementation of RFID in manufacturing and supply chain
and their enterprise services department. The Impinj presentation wasn't too bad,
I liked the way they designed their firmware upgrades, and if their claims on power
consumption (27W active power) are true, that would have some benefits. 
&lt;/p&gt;
&lt;p&gt;
We'll see what Day 2 holds. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=ab98d295-8ca4-4de6-a0bb-25337241297d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,ab98d295-8ca4-4de6-a0bb-25337241297d.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=43f8c73e-fd7a-4e9a-8e79-57d83aae504e</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,43f8c73e-fd7a-4e9a-8e79-57d83aae504e.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,43f8c73e-fd7a-4e9a-8e79-57d83aae504e.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=43f8c73e-fd7a-4e9a-8e79-57d83aae504e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I arrived in the Seattle area today to attend the <a href="https://dynamicevents.emeetingsonline.com/emeetings/websitev2.asp?mmnno=279&amp;pagename=SITE95554">BizTalk
RFID Solution Days</a> conference and hands on training, hosted by Microsoft. I was
delayed in Madison due to ice for about 1.5 hours and barely made my connecting flight
in Minneapolis, but everything worked out, and my baggage arrived with me. 
</p>
        <p>
I'm staying in downtown Bellevue at the <a href="http://www.marriott.com/hotels/travel/bvudt-courtyard-seattle-bellevue-downtown/">Courtyard
Marriott</a>, which is a pretty nice hotel. It has free wired hi-speed Internet in
the rooms, is there any other measure? The conference itself is about a 1/2 mile away
at the <a href="http://westin.com">Bellevue Westin</a>. I'm just walking to avoid
having to deal with parking and a rental car. I guess the weather here today and the
next couple of days is unseasonably nice (sunny and a high of 50). 
</p>
        <p>
Bellevue seems like a city in the midst of an identity crisis. There are probably
10-15 hi-rise construction efforts underway, with signs indicating another 10-15 will
be started soon. I have no doubt that if I were to return next year, I wouldn't recognize
the city at all. I guess it's a good sign from the point of view of the economy. I
also saw someone showing off a <a href="http://www.lamborghini.com/2006/lamboSitenormal.asp?lang=eng">Lamborghini</a> by
revving it's engine and weaving in and out of Traffic. What can I say, we don't see
many exotics (just our share of Honda Civic's) of those in Wisconsin.
</p>
        <p>
The only other non-conference related note, was a commercial I saw for a place called <a href="http://www.daveandbusters.com/default.aspx">Dave
and Busters</a>. It looks like an adult's version of <a title="Chuck E. Cheese" href="http://www.chuckecheese.com/">Chuck
E. Cheese</a>, but with allot better food and better games. We defiantly need something
like this in Madison, as there are some people out there who prefer to do something
other then drink.
</p>
        <p>
Tonight was the pre-conference reception and registration which was a good chance
to hit up the vendors in a little less chaotic environment. Registration was easy
and straight forward, and we got a really nice <a href="http://www.ogio.com/">Ogio</a> backpack
(stylized with company logos). I was actually thinking about getting a small bag for
my return flight, as my primary backpack with my 17" laptop was a little too unwieldy
for 3 across seating on the plan. 
</p>
        <p>
          <strong>Vendors</strong>
        </p>
        <p>
First vendor I talked to was <a href="www.intermec.com">Intermec</a>, a manufacturer
of RFID hardware including stationary readers, mobile readers, printers, and rugged
tags. I spent most of my time talking about the <a href="www.intermec.com">Intermec</a> IF61
(<a href="http://www.intermec.com/products/rfidif61a/index.aspx">link</a>), a new
stationary reader running on top of a Linux OS. While a Linux OS is nothing new, it
does come out of the box with Mono, which should allow it to run .Net Framework applications.
On the hardware side, it can handle 95-264 V AC power, and has built in B/G Wifi.
Intermec is releases a set of web services as part of a firmware upgrade to help with
the management of the reader. 
</p>
        <p>
Next up was <a href="http://www.impinj.com/">Impinj</a>, another RFID hardware provider
and tags. What I liked about them was that there reader API is based off <a href="http://www.llrp.org/">LLRP</a>,
and open source project focused on RFID applications. Impinj's implementation of BizTalk
DSPI wraps the <a href="http://www.llrp.org/">LLRP</a><strong> (</strong>low level
reader protocol) implementation. They are presenting on Monday, so I will have more
about their speedway reading in tomorrow's post. 
</p>
        <p>
          <a href="http://www.zebra.com/">Zebra</a> was my next stop and they had two printers
on display. the first was a print and apply demo unit which had a clear side so you
could see what was going on inside. The second was a standard label printer enabled
with RFID. When I asked them about the printer API, they were quick to point out DSPI
support, which wouldn't always work for me. Their DSPI implementation wraps the ZPL
(Zebra Programming Language) so it is available if BizTalk RFID isn't.  Both
printers have support for checking the RFID tag to make sure it's readable. For the
standard label printer, if a tag isn't readable, it will print VOID on the tag (or
anything else you configure). 
</p>
        <p>
          <a href="http://www.cathexis.com">Cathexis</a> is one of two companies with a drawing
for prizes (Guitar Hero 3 and an XBOX 360) and is based out of Canada. Signing up
for the drawing incorporated RFID and some of their products, including a HF<strong></strong>pen
reader, and a long range HF antenna. The pen reader, is an RFID reader about the size
of a dry erase marker and in addition to an HF  RFID reader also has blue tooth.
Our name badges have an HF tag imbedded, so it is scanned by the pen reader and stored
in a database. Every time you walk past their booth the long range HF<strong></strong>antenna
picks up the tag and enters you again. Needless to say, their booth is usually very
busy. I think my biggest take away is an idea on how to setup a promotional give away
for <a href="http://www.tersosolutions.com">Terso</a>. Don't get me wrong the Bluetooth
pen reader is pretty cool just not very applicable in my current situation.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=43f8c73e-fd7a-4e9a-8e79-57d83aae504e" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>BizTalk RFID Solutions Days - Day 0</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,43f8c73e-fd7a-4e9a-8e79-57d83aae504e.aspx</guid>
      <link>http://blog.salvoz.com/2008/02/17/BizTalkRFIDSolutionsDaysDay0.aspx</link>
      <pubDate>Sun, 17 Feb 2008 11:27:32 GMT</pubDate>
      <description>&lt;p&gt;
I arrived in the Seattle area today to attend the &lt;a href="https://dynamicevents.emeetingsonline.com/emeetings/websitev2.asp?mmnno=279&amp;amp;pagename=SITE95554"&gt;BizTalk
RFID Solution Days&lt;/a&gt; conference and hands on training, hosted by Microsoft. I was
delayed in Madison due to ice for about 1.5 hours and barely made my connecting flight
in Minneapolis, but everything worked out, and my baggage arrived with me. 
&lt;/p&gt;
&lt;p&gt;
I'm staying in downtown Bellevue at the &lt;a href="http://www.marriott.com/hotels/travel/bvudt-courtyard-seattle-bellevue-downtown/"&gt;Courtyard
Marriott&lt;/a&gt;, which is a pretty nice hotel. It has free wired hi-speed Internet in
the rooms, is there any other measure? The conference itself is about a 1/2 mile away
at the &lt;a href="http://westin.com"&gt;Bellevue Westin&lt;/a&gt;. I'm just walking to avoid
having to deal with parking and a rental car. I guess the weather here today and the
next couple of days is unseasonably nice (sunny and a high of 50). 
&lt;/p&gt;
&lt;p&gt;
Bellevue seems like a city in the midst of an identity crisis. There are probably
10-15 hi-rise construction efforts underway, with signs indicating another 10-15 will
be started soon. I have no doubt that if I were to return next year, I wouldn't recognize
the city at all. I guess it's a good sign from the point of view of the economy. I
also saw someone showing off a &lt;a href="http://www.lamborghini.com/2006/lamboSitenormal.asp?lang=eng"&gt;Lamborghini&lt;/a&gt; by
revving it's engine and weaving in and out of Traffic. What can I say, we don't see
many exotics (just our share of Honda Civic's) of those in Wisconsin.
&lt;/p&gt;
&lt;p&gt;
The only other non-conference related note, was a commercial I saw for a place called &lt;a href="http://www.daveandbusters.com/default.aspx"&gt;Dave
and Busters&lt;/a&gt;. It looks like an adult's version of &lt;a title="Chuck E. Cheese" href="http://www.chuckecheese.com/"&gt;Chuck
E. Cheese&lt;/a&gt;, but with allot better food and better games. We defiantly need something
like this in Madison, as there are some people out there who prefer to do something
other then drink.
&lt;/p&gt;
&lt;p&gt;
Tonight was the pre-conference reception and registration which was a good chance
to hit up the vendors in a little less chaotic environment. Registration was easy
and straight forward, and we got a really nice &lt;a href="http://www.ogio.com/"&gt;Ogio&lt;/a&gt; backpack
(stylized with company logos). I was actually thinking about getting a small bag for
my return flight, as my primary backpack with my 17" laptop was a little too unwieldy
for 3 across seating on the plan. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Vendors&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
First vendor I talked to was &lt;a href="www.intermec.com"&gt;Intermec&lt;/a&gt;, a manufacturer
of RFID hardware including stationary readers, mobile readers, printers, and rugged
tags. I spent most of my time talking about the &lt;a href="www.intermec.com"&gt;Intermec&lt;/a&gt; IF61
(&lt;a href="http://www.intermec.com/products/rfidif61a/index.aspx"&gt;link&lt;/a&gt;), a new
stationary reader running on top of a Linux OS. While a Linux OS is nothing new, it
does come out of the box with Mono, which should allow it to run .Net Framework applications.
On the hardware side, it can handle 95-264 V AC power, and has built in B/G Wifi.
Intermec is releases a set of web services as part of a firmware upgrade to help with
the management of the reader. 
&lt;/p&gt;
&lt;p&gt;
Next up was &lt;a href="http://www.impinj.com/"&gt;Impinj&lt;/a&gt;, another RFID hardware provider
and tags. What I liked about them was that there reader API is based off &lt;a href="http://www.llrp.org/"&gt;LLRP&lt;/a&gt;,
and open source project focused on RFID applications. Impinj's implementation of BizTalk
DSPI wraps the &lt;a href="http://www.llrp.org/"&gt;LLRP&lt;/a&gt;&lt;strong&gt; (&lt;/strong&gt;low level
reader protocol) implementation. They are presenting on Monday, so I will have more
about their speedway reading in tomorrow's post. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.zebra.com/"&gt;Zebra&lt;/a&gt; was my next stop and they had two printers
on display. the first was a print and apply demo unit which had a clear side so you
could see what was going on inside. The second was a standard label printer enabled
with RFID. When I asked them about the printer API, they were quick to point out DSPI
support, which wouldn't always work for me. Their DSPI implementation wraps the ZPL
(Zebra Programming Language) so it is available if BizTalk RFID isn't.&amp;nbsp; Both
printers have support for checking the RFID tag to make sure it's readable. For the
standard label printer, if a tag isn't readable, it will print VOID on the tag (or
anything else you configure). 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cathexis.com"&gt;Cathexis&lt;/a&gt; is one of two companies with a drawing
for prizes (Guitar Hero 3 and an XBOX 360) and is based out of Canada. Signing up
for the drawing incorporated RFID and some of their products, including a HF&lt;strong&gt; &lt;/strong&gt;pen
reader, and a long range HF antenna. The pen reader, is an RFID reader about the size
of a dry erase marker and in addition to an HF&amp;nbsp; RFID reader also has blue tooth.
Our name badges have an HF tag imbedded, so it is scanned by the pen reader and stored
in a database. Every time you walk past their booth the long range HF&lt;strong&gt; &lt;/strong&gt;antenna
picks up the tag and enters you again. Needless to say, their booth is usually very
busy. I think my biggest take away is an idea on how to setup a promotional give away
for &lt;a href="http://www.tersosolutions.com"&gt;Terso&lt;/a&gt;. Don't get me wrong the Bluetooth
pen reader is pretty cool just not very applicable in my current situation.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=43f8c73e-fd7a-4e9a-8e79-57d83aae504e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,43f8c73e-fd7a-4e9a-8e79-57d83aae504e.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=5c2f1225-e087-4a91-a20f-e1744767d9e4</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,5c2f1225-e087-4a91-a20f-e1744767d9e4.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,5c2f1225-e087-4a91-a20f-e1744767d9e4.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5c2f1225-e087-4a91-a20f-e1744767d9e4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I will be attending the first annual <a href="https://dynamicevents.emeetingsonline.com/emeetings/websitev2.asp?mmnno=279&amp;pagename=SITE95554">Microsoft
RFID Solution Days</a>, February 18-21 in Washington. I'm hoping to make it for the
Reception on Sunday but I'm still waiting for my travel itinerary to be finalized
by the Travel Agency. I'm also on the wait list for the hands on training and hope
to get into that as well.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=5c2f1225-e087-4a91-a20f-e1744767d9e4" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Microsoft RFID Solution Days</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,5c2f1225-e087-4a91-a20f-e1744767d9e4.aspx</guid>
      <link>http://blog.salvoz.com/2008/01/30/MicrosoftRFIDSolutionDays.aspx</link>
      <pubDate>Wed, 30 Jan 2008 20:38:49 GMT</pubDate>
      <description>&lt;p&gt;
I will be attending the first annual &lt;a href="https://dynamicevents.emeetingsonline.com/emeetings/websitev2.asp?mmnno=279&amp;amp;pagename=SITE95554"&gt;Microsoft
RFID Solution Days&lt;/a&gt;, February 18-21 in Washington. I'm hoping to make it for the
Reception on Sunday but I'm still waiting for my travel itinerary to be finalized
by the Travel Agency. I'm also on the wait list for the hands on training and hope
to get into that as well.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=5c2f1225-e087-4a91-a20f-e1744767d9e4" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,5c2f1225-e087-4a91-a20f-e1744767d9e4.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=981c4dd8-9670-4f98-b0c4-b54730f8d6b7</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,981c4dd8-9670-4f98-b0c4-b54730f8d6b7.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,981c4dd8-9670-4f98-b0c4-b54730f8d6b7.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=981c4dd8-9670-4f98-b0c4-b54730f8d6b7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While searching for information and ideas on configuration stores, I came across an <a href="http://geekswithblogs.net/gwiele/archive/2005/03/16/26469.aspx">article</a> on
better WMI scripting. Defiantly something I will need to review in the future as I
get into automated BizTalk management.
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=981c4dd8-9670-4f98-b0c4-b54730f8d6b7" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>WMI and BizTalk</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,981c4dd8-9670-4f98-b0c4-b54730f8d6b7.aspx</guid>
      <link>http://blog.salvoz.com/2007/12/12/WMIAndBizTalk.aspx</link>
      <pubDate>Wed, 12 Dec 2007 23:42:54 GMT</pubDate>
      <description>&lt;p&gt;
While searching for information and ideas on configuration stores, I came across an &lt;a href="http://geekswithblogs.net/gwiele/archive/2005/03/16/26469.aspx"&gt;article&lt;/a&gt; on
better WMI scripting. Defiantly something I will need to review in the future as I
get into automated BizTalk management.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=981c4dd8-9670-4f98-b0c4-b54730f8d6b7" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,981c4dd8-9670-4f98-b0c4-b54730f8d6b7.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=60f8d00a-b271-4b6c-ab81-0e4b21713119</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,60f8d00a-b271-4b6c-ab81-0e4b21713119.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,60f8d00a-b271-4b6c-ab81-0e4b21713119.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=60f8d00a-b271-4b6c-ab81-0e4b21713119</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Server</strong>
        </p>
        <p>
Today I tackled upgrading my development server from BizTalk 2006 (Developer Edition)
to R2 (Developer Edition). You can read my <a href="http://blog.salvoz.com/2007/11/21/InstallingBizTalk2006R2.aspx">previous
post</a> on installing R2 on a clean machine. Detailed instructions (for all supported
install scenarios) can be downloaded from <a href="http://go.microsoft.com/fwlink/?LinkID=46922">Microsoft
Downloads</a> (See below for another link). 
</p>
        <p>
Upgrading was extremely easy, and I encountered no errors or warnings. I used the
same cab file I downloaded for my clean install, since it was the same platform (Windows
Server 2003 32 bit). You need to stop all BizTalk related services, and IIS (this
is detailed in the instructions) during the install, and then restart them after the
upgrade is finished. There wasn't even a reboot required.
</p>
        <p>
One thing I'd like to point out, is that upon first glance, it looks like you are
still running BizTalk 2006. The banner in the admin console doesn't mention R2, there
is no new group in start/programs, even though the upgrade process lists an unistall
step of BizTalk 2006 and an install of R2, there is no R2 program listed in Add/Remove
programs, and the 2006 is still listed. Re-Running the R2 installer gives you options
to repair, modify or remove, so the installer seems to think everything is correctly
installed. 
</p>
        <p>
Not quite convinced I decided to look into this further. There is a registry key,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BizTalk Server\, which lists versions. I had
a sub key for 3.0 and 3.5_Migrated. On my clean install, there is no 3.5_Mirgrated
key, the admin console, and Add/Remove programs all list 2006 (not R2), so I guess
that's just the way it is. If you are in the admin console and go to Help\About Microsoft
BizTalk Server Administration, it lists version 3.6.1404 (compared to version 3.5.1602
before the upgrade). I guess I had an expectation that it would say R2 somewhere. 
</p>
        <p>
Another gotcha, is that the new WCF adapters are not installed by default. After the
upgrade process, you have to re-run the installer and choose modify. Then you can
add the WCF adapters, both under the BizTalk runtime, and admin tool. That goes for
any optional component. If it wasn't installed before the upgrade, you have to go
in and add it after the fact. 
</p>
        <p>
          <strong>Workstation</strong>
        </p>
        <p>
Figured now was as good as time as ever to upgrade my workstation (development components)
as well. The link I posted above didn't have a guide for installing on Vista, but
a quick search found another <a href="http://www.microsoft.com/downloads/details.aspx?familyid=df2e8a88-fb23-49a4-9ac7-d17f72517d12&amp;displaylang=en">page</a> on
Microsoft Downloads that did have a Vista Guide. I wasn't planning on reading the
guide, but I couldn't get the install process to even start under Vista, so figured
some trickery might be involved.
</p>
        <p>
The first thing I did was find the redistributable components for Vista, so I could
start downloading those while reading the install guide. The link to the components
in including in the Technical Appendix in the install guide, and at the time of this
post, the direct link is: <a href="http://go.microsoft.com/fwlink/?LinkId=81432">http://go.microsoft.com/fwlink/?LinkId=81432</a>,
and weigh in around 30MB. 
</p>
        <p>
Since I just want the development tools, I skipped to page 21 in the guide, which
are where the install instructions start. There was no special steps listed for Vista.
I ended up rebooting my computer, and still couldn't get it to start (clicking install
BizTalk from the setup screen didn't seem to kick off the msi process). I tried running
the msi directly, and got the expected error saying to run setup. So I went back to
setup, and this time it worked, weird. 
</p>
        <p>
After I actually got the installer running, everything after that was as easy as the
server upgrade. I could have appreciated support for VS 2008, but 2005 isn't all that
bad. The only time I would notice a difference is if I am working on a class library
instead of a BizTalk artifact. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=60f8d00a-b271-4b6c-ab81-0e4b21713119" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Upgrading BizTalk 2006 to R2</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,60f8d00a-b271-4b6c-ab81-0e4b21713119.aspx</guid>
      <link>http://blog.salvoz.com/2007/11/29/UpgradingBizTalk2006ToR2.aspx</link>
      <pubDate>Thu, 29 Nov 2007 22:22:43 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;Server&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Today I tackled upgrading my development server from BizTalk 2006 (Developer Edition)
to R2 (Developer Edition). You can read my &lt;a href="http://blog.salvoz.com/2007/11/21/InstallingBizTalk2006R2.aspx"&gt;previous
post&lt;/a&gt; on installing R2 on a clean machine. Detailed instructions (for all supported
install scenarios) can be downloaded from &lt;a href="http://go.microsoft.com/fwlink/?LinkID=46922"&gt;Microsoft
Downloads&lt;/a&gt; (See below for another link). 
&lt;/p&gt;
&lt;p&gt;
Upgrading was extremely easy, and I encountered no errors or warnings. I used the
same cab file I downloaded for my clean install, since it was the same platform (Windows
Server 2003 32 bit). You need to stop all BizTalk related services, and IIS (this
is detailed in the instructions) during the install, and then restart them after the
upgrade is finished. There wasn't even a reboot required.
&lt;/p&gt;
&lt;p&gt;
One thing I'd like to point out, is that upon first glance, it looks like you are
still running BizTalk 2006. The banner in the admin console doesn't mention R2, there
is no new group in start/programs, even though the upgrade process lists an unistall
step of BizTalk 2006 and an install of R2, there is no R2 program listed in Add/Remove
programs, and the 2006 is still listed. Re-Running the R2 installer gives you options
to repair, modify or remove, so the installer seems to think everything is correctly
installed. 
&lt;/p&gt;
&lt;p&gt;
Not quite convinced I decided to look into this further. There is a registry key,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\BizTalk Server\, which lists versions. I had
a sub key for 3.0 and 3.5_Migrated. On my clean install, there is no 3.5_Mirgrated
key, the admin console, and Add/Remove programs all list 2006 (not R2), so I guess
that's just the way it is. If you are in the admin console and go to Help\About Microsoft
BizTalk Server Administration, it lists version 3.6.1404 (compared to version 3.5.1602
before the upgrade). I guess I had an expectation that it would say R2 somewhere. 
&lt;/p&gt;
&lt;p&gt;
Another gotcha, is that the new WCF adapters are not installed by default. After the
upgrade process, you have to re-run the installer and choose modify. Then you can
add the WCF adapters, both under the BizTalk runtime, and admin tool. That goes for
any optional component. If it wasn't installed before the upgrade, you have to go
in and add it after the fact. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Workstation&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Figured now was as good as time as ever to upgrade my workstation (development components)
as well. The link I posted above didn't have a guide for installing on Vista, but
a quick search found another &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=df2e8a88-fb23-49a4-9ac7-d17f72517d12&amp;amp;displaylang=en"&gt;page&lt;/a&gt; on
Microsoft Downloads that did have a Vista Guide. I wasn't planning on reading the
guide, but I couldn't get the install process to even start under Vista, so figured
some trickery might be involved.
&lt;/p&gt;
&lt;p&gt;
The first thing I did was find the redistributable components for Vista, so I could
start downloading those while reading the install guide. The link to the components
in including in the Technical Appendix in the install guide, and at the time of this
post, the direct link is: &lt;a href="http://go.microsoft.com/fwlink/?LinkId=81432"&gt;http://go.microsoft.com/fwlink/?LinkId=81432&lt;/a&gt;,
and weigh in around 30MB. 
&lt;/p&gt;
&lt;p&gt;
Since I just want the development tools, I skipped to page 21 in the guide, which
are where the install instructions start. There was no special steps listed for Vista.
I ended up rebooting my computer, and still couldn't get it to start (clicking install
BizTalk from the setup screen didn't seem to kick off the msi process). I tried running
the msi directly, and got the expected error saying to run setup. So I went back to
setup, and this time it worked, weird. 
&lt;/p&gt;
&lt;p&gt;
After I actually got the installer running, everything after that was as easy as the
server upgrade. I could have appreciated support for VS 2008, but 2005 isn't all that
bad. The only time I would notice a difference is if I am working on a class library
instead of a BizTalk artifact. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=60f8d00a-b271-4b6c-ab81-0e4b21713119" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,60f8d00a-b271-4b6c-ab81-0e4b21713119.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=de311441-9107-422f-b49c-d2afccdb27f3</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,de311441-9107-422f-b49c-d2afccdb27f3.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,de311441-9107-422f-b49c-d2afccdb27f3.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=de311441-9107-422f-b49c-d2afccdb27f3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today I made my first attempt at installing (clean install) BizTalk 2006 R2 on our
development server. I started out by reviewing the documentation for installing on
Windows Server 2003 in a single server configuration. You can find this documentation
by clicking the link on the initial install screen for BizTalk. This will take you
to Microsoft to get the latest version of the documentation. I also picked up
the multi server deployment (production environment), and Vista (development workstation).
 The first part of the documentation is more of reference material. Starting
on page 38 it switches to detailed installation instructions for each piece that needs
to be installed, starting with Windows Server itself. 
</p>
        <p>
          <strong>Installation Wizard</strong>
        </p>
        <blockquote>
          <p>
            <strong>1.</strong> Click thru until you get to Select Components. There are obviously
the required core components. I also selected items which I thought we might need in
the future, but didn't impact the amount of pre-requisite software I needed to install. There
is a very nice matrix in the install document that outlines what needs to be installed
for each feature. Based on that I selected:
</p>
        </blockquote>
        <ul>
          <ul>
            <li>
Documentation</li>
            <li>
Server Runtime</li>
            <ul>
              <li>
BizTalk EDI/AS2 Runtime (Possible Future Need)</li>
              <li>
WCF 
</li>
            </ul>
            <li>
Portal Components</li>
            <ul>
              <li>
BAM (Possible future use)</li>
              <li>
Human Workflow Web Service (Possible Future Use)</li>
            </ul>
            <li>
Administration Tools</li>
            <ul>
              <li>
WCF</li>
            </ul>
            <li>
Additional Software</li>
            <ul>
              <li>
SSO Admin</li>
              <li>
SSO Master Server</li>
              <li>
BAM Client</li>
            </ul>
          </ul>
        </ul>
        <blockquote>
          <p>
I also had to change the install path from C:\ to E:\ to comply with IT standards. 
</p>
          <p>
Clicking next brings you to a screen where you select how you want certain pre-requisites
(redistributables) downloaded and installed. Choosing the download option (not auto
install), takes you to the MS downloads site and cancels the installation. The cab
file I needed to download was 102MB, and will be needed for a couple of other installations,
so downloading it separate was a good idea. 
</p>
        </blockquote>
        <blockquote>
          <p>
            <strong>2. </strong>After downloading and coping the cab file to the server, I restarted
the installation, re-selected my components, and then chose the option to install
redistributables from the cab file. I opted to provide my password for automatic login
after reboots. I've copied and pasted the summary of items to be installed that is
displayed before you click install. 
</p>
          <p>
Prerequisites 
</p>
          <p>
The following component(s) will be installed automatically on this computer: 
</p>
          <ul>
            <li>
- Microsoft SQL XML 3.0 Service Pack 3 
</li>
            <li>
- Microsoft Office Web Components 
</li>
            <li>
- Microsoft ADO MD.Net 8.0 
</li>
            <li>
- Microsoft ADO MD.Net 8.0 Patch 
</li>
            <li>
- Microsoft ADO MD.Net 9.0 
</li>
            <li>
- Setup runtime files 
</li>
            <li>
- Enterprise Single Sign-On Server 
</li>
            <li>
- Enterprise Single Sign-On Administration 
</li>
            <li>
- Microsoft Primary Interoperability Assemblies 2005 
</li>
            <li>
- Microsoft Document Explorer 2005</li>
          </ul>
          <p>
Microsoft BizTalk Server 2006 Components 
</p>
          <p>
The following components will be installed: 
</p>
          <ul>
            <li>
- Documentation 
</li>
            <li>
- Server Runtime 
</li>
            <li>
- BizTalk EDI/AS2 Runtime 
</li>
            <li>
- Windows Communication Foundation Adapter 
</li>
            <li>
- Portal Components 
</li>
            <li>
- Business Activity Monitoring 
</li>
            <li>
- Human Workflow Web Service 
</li>
            <li>
- Administration Tools 
</li>
            <li>
- Windows Communication Foundation Administration Tools 
</li>
            <li>
- Additional Software 
</li>
            <li>
- Enterprise Single Sign-On Administration Module 
</li>
            <li>
- Enterprise Single Sign-On Master Secret Server 
</li>
            <li>
- BAM Client</li>
          </ul>
        </blockquote>
        <blockquote>
          <p>
            <strong>3. </strong>No reboots were required, and no errors were reported. By default,
when you finish the install, you are taken to the Configuration Wizard. 
</p>
        </blockquote>
        <p>
          <strong>Configuration Wizard</strong>
        </p>
        <blockquote>
          <p>
            <strong>1. </strong>The first thing you have to do is select your configuration type
from either Basic or Custom, with the main difference being what service accounts
are used for what services. I chose basic, which sets up all of the services to use
the same account. 
</p>
          <p>
On page 55 of the instructions, it states that the specified user account will be
granted the necessary permissions, including SQL permissions. I went ahead and created
a local machine account that belonged to the users (not power users) group. I then
specified this account in the configuration wizard and clicked Configure.
</p>
          <p>
            <strong>2.</strong> A summary of the configuration about to be performed pops up.
I did a quick review, and then clicked next. I then sat, with my fingers crossed as
the progress bar ticked by, hoping everything configured correctly. I didn't want
to find out what graphic is displayed for an error (on success a green check box is
displayed next to each section that is configured). The EDI/AS2 runtime took the longest
to configure. I might not install that next time.
</p>
          <p>
            <strong>3. </strong>Everything completed successfully, except there was one warning
with SSO. I have a feeling it is a note to back up the SSO secret. Another possibility
is that I am running the SSO service with a local, and not a domain account. 
</p>
        </blockquote>
        <p>
          <strong>Backup SSO Secret</strong>
        </p>
        <ol>
          <li>
Start/Programs/Microsoft Enterprise Single Sign-On</li>
          <li>
Expand Enterprise Single Sign-on</li>
          <li>
Right Click System and choose backup secret</li>
          <li>
Choose a path, and enter a password. 
</li>
          <li>
Make sure to write down your password and backup the file that was created. I store
all my passwords on this nature using KeePass. I also can attach the actual backup
file to the password entry in KeePass. If you have problems coping the file, check
the NTFS permissions on the file. 
</li>
        </ol>
        <p>
          <strong>Simple Test - CBR</strong>
        </p>
        <blockquote>
          <p>
            <strong>1. </strong>Pre-Conditions: Event logs were clear of errors and warnings at
this point. I did a quick inspection of services to verify the ones I was aware of,
were running. 
</p>
          <ul>
            <li>
BizTalk Service BizTalk Group : BizTalkServerApplication</li>
            <li>
Enterprise Single Sign-On Service</li>
            <li>
SQL Server (MSSQLSERVER)</li>
            <li>
SQL Server Agent (MSSQLSERVER) - Change startup from manual to automatic</li>
          </ul>
          <p>
            <strong>2. </strong>Reboot and check event logs for errors on startup. I also took
this opportunity to snapshot the VM so that I could clean out my CBR test.
</p>
          <p>
            <strong>3. </strong>I created a simple CBR scheme, using 2 local folders, 1 send and
1 receive port. The exact implementation details are outside the scope of this post.
</p>
        </blockquote>
        <p>
          <strong>What's Next</strong>
        </p>
        <p>
Next up, is the upgrade of a BizTalk 2006 install to 2006 R2, so check back for a
write up of how that goes. 
</p>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=de311441-9107-422f-b49c-d2afccdb27f3" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Installing BizTalk 2006 R2</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,de311441-9107-422f-b49c-d2afccdb27f3.aspx</guid>
      <link>http://blog.salvoz.com/2007/11/21/InstallingBizTalk2006R2.aspx</link>
      <pubDate>Wed, 21 Nov 2007 22:59:11 GMT</pubDate>
      <description>&lt;p&gt;
Today I made my first attempt at installing (clean install) BizTalk 2006 R2 on our
development server. I started out by reviewing the documentation for installing on
Windows Server 2003 in a single server configuration. You can find this documentation
by clicking the link on the initial install screen for BizTalk. This will take you
to Microsoft to get the latest version of the documentation. I&amp;nbsp;also picked up
the multi server deployment (production environment), and Vista (development workstation).
&amp;nbsp;The first part of the documentation is more of reference material. Starting
on page 38 it switches to detailed installation instructions for each piece that needs
to be installed, starting with Windows Server itself. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Installation Wizard&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;1.&lt;/strong&gt; Click thru until you get to Select Components. There are obviously
the required core components. I also selected items which I thought we might need&amp;nbsp;in
the future, but didn't impact the amount of pre-requisite software I needed to install.&amp;nbsp;There
is a very nice matrix in the install document that outlines what needs to be installed
for each feature. Based on that I selected:
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;
Documentation&lt;/li&gt;
&lt;li&gt;
Server Runtime&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
BizTalk EDI/AS2 Runtime (Possible Future Need)&lt;/li&gt;
&lt;li&gt;
WCF 
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Portal Components&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
BAM (Possible future use)&lt;/li&gt;
&lt;li&gt;
Human Workflow Web Service (Possible Future Use)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Administration Tools&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
WCF&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Additional Software&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
SSO Admin&lt;/li&gt;
&lt;li&gt;
SSO Master Server&lt;/li&gt;
&lt;li&gt;
BAM Client&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;blockquote&gt; 
&lt;p&gt;
I also had to change the install path from C:\ to E:\ to comply with IT standards. 
&lt;/p&gt;
&lt;p&gt;
Clicking next brings you to a screen where you select how you want certain pre-requisites
(redistributables) downloaded and installed. Choosing the download option (not auto
install), takes you to the MS downloads site and cancels the installation. The cab
file I needed to download was 102MB, and will be needed for a couple of other installations,
so downloading it separate was a good idea. 
&lt;/p&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;2. &lt;/strong&gt;After downloading and coping the cab file to the server, I restarted
the installation, re-selected my components, and then chose the option to install
redistributables from the cab file. I opted to provide my password for automatic login
after reboots. I've copied and pasted the summary of items to be installed that is
displayed before you click install. 
&lt;/p&gt;
&lt;p&gt;
Prerequisites 
&lt;p&gt;
The following component(s) will be installed automatically on this computer: 
&lt;ul&gt;
&lt;li&gt;
- Microsoft SQL XML 3.0 Service Pack 3 
&lt;li&gt;
- Microsoft Office Web Components 
&lt;li&gt;
- Microsoft ADO MD.Net 8.0 
&lt;li&gt;
- Microsoft ADO MD.Net 8.0 Patch 
&lt;li&gt;
- Microsoft ADO MD.Net 9.0 
&lt;li&gt;
- Setup runtime files 
&lt;li&gt;
- Enterprise Single Sign-On Server 
&lt;li&gt;
- Enterprise Single Sign-On Administration 
&lt;li&gt;
- Microsoft Primary Interoperability Assemblies 2005 
&lt;li&gt;
- Microsoft Document Explorer 2005&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Microsoft BizTalk Server 2006 Components 
&lt;p&gt;
The following components will be installed: 
&lt;ul&gt;
&lt;li&gt;
- Documentation 
&lt;li&gt;
- Server Runtime 
&lt;li&gt;
- BizTalk EDI/AS2 Runtime 
&lt;li&gt;
- Windows Communication Foundation Adapter 
&lt;li&gt;
- Portal Components 
&lt;li&gt;
- Business Activity Monitoring 
&lt;li&gt;
- Human Workflow Web Service 
&lt;li&gt;
- Administration Tools 
&lt;li&gt;
- Windows Communication Foundation Administration Tools 
&lt;li&gt;
- Additional Software 
&lt;li&gt;
- Enterprise Single Sign-On Administration Module 
&lt;li&gt;
- Enterprise Single Sign-On Master Secret Server 
&lt;li&gt;
- BAM Client&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; &lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;3. &lt;/strong&gt;No reboots were required, and no errors were reported. By default,
when you finish the install, you are taken to the Configuration Wizard. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Configuration Wizard&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;1. &lt;/strong&gt;The first thing you have to do is select your configuration type
from either Basic or Custom, with the main difference being what service accounts
are used for what services. I chose basic, which sets up all of the services to use
the same account. 
&lt;/p&gt;
&lt;p&gt;
On page 55 of the instructions, it states that the specified user account will be
granted the necessary permissions, including SQL permissions. I went ahead and created
a local machine account that belonged to the users (not power users) group. I then
specified this account in the configuration wizard and clicked Configure.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2.&lt;/strong&gt; A summary of the configuration about to be performed pops up.
I did a quick review, and then clicked next. I then sat, with my fingers crossed as
the progress bar ticked by, hoping everything configured correctly. I didn't want
to find out what graphic is displayed for an error (on success a green check box is
displayed next to each section that is configured). The EDI/AS2 runtime took the longest
to configure. I might not install that next time.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. &lt;/strong&gt;Everything completed successfully, except there was one warning
with SSO. I have a feeling it is a note to back up the SSO secret. Another possibility
is that I am running the SSO service with a local, and not a domain account. 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;Backup SSO Secret&lt;/strong&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Start/Programs/Microsoft Enterprise Single Sign-On&lt;/li&gt;
&lt;li&gt;
Expand Enterprise Single Sign-on&lt;/li&gt;
&lt;li&gt;
Right Click System and choose backup secret&lt;/li&gt;
&lt;li&gt;
Choose a path, and enter a password. 
&lt;/li&gt;
&lt;li&gt;
Make sure to write down your password and backup the file that was created. I store
all my passwords on this nature using KeePass. I also can attach the actual backup
file to the password entry in KeePass. If you have problems coping the file, check
the NTFS permissions on the file. 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;strong&gt;Simple Test - CBR&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;1. &lt;/strong&gt;Pre-Conditions: Event logs were clear of errors and warnings at
this point. I did a quick inspection of services to verify the ones I was aware of,
were running. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
BizTalk Service BizTalk Group : BizTalkServerApplication&lt;/li&gt;
&lt;li&gt;
Enterprise Single Sign-On Service&lt;/li&gt;
&lt;li&gt;
SQL Server (MSSQLSERVER)&lt;/li&gt;
&lt;li&gt;
SQL Server Agent (MSSQLSERVER) - Change startup from manual to automatic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;2. &lt;/strong&gt;Reboot and check event logs for errors on startup. I also took
this opportunity to snapshot the VM so that I could clean out my CBR test.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. &lt;/strong&gt;I created a simple CBR scheme, using 2 local folders, 1 send and
1 receive port. The exact implementation details are outside the scope of this post.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;What's Next&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Next up, is the upgrade of a BizTalk 2006 install to 2006 R2, so check back for a
write up of how that goes. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=de311441-9107-422f-b49c-d2afccdb27f3" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,de311441-9107-422f-b49c-d2afccdb27f3.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
    <item>
      <trackback:ping>http://blog.salvoz.com/Trackback.aspx?guid=c2ab901b-5ff9-4eab-b963-2e841266bc86</trackback:ping>
      <pingback:server>http://blog.salvoz.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.salvoz.com/PermaLink,guid,c2ab901b-5ff9-4eab-b963-2e841266bc86.aspx</pingback:target>
      <dc:creator>Adam Salvo</dc:creator>
      <wfw:comment>http://blog.salvoz.com/CommentView,guid,c2ab901b-5ff9-4eab-b963-2e841266bc86.aspx</wfw:comment>
      <wfw:commentRss>http://blog.salvoz.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c2ab901b-5ff9-4eab-b963-2e841266bc86</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some quick notes on installing a custom BizTalk adapter.
</p>
        <ul>
          <li>
Your assemblies do not have to be in the GAC. I just looked on 2 BizTalk applications
that are installed and running, and the assemblies for the adapters are not in the
GAC 
</li>
          <li>
I inherited a VS setup project that appears to handle the registry stuff for you.
I don't know if you get this out of the box when creating a new setup project and
adding references to your BizTalk project. 
</li>
          <li>
You need to register the custom adapters using a registry file. 
<ul><li>
This file can be created using a tool that comes in the SDK and is installed on my
computer here: C:\Program Files\Microsoft BizTalk Server 2006\sdk\Utilities\AdapterRegistryWizard 
</li><li>
Documentation on the Registry File: <a title="http://msdn2.microsoft.com/en-us/library/aa560561.aspx" href="http://msdn2.microsoft.com/en-us/library/aa560561.aspx">http://msdn2.microsoft.com/en-us/library/aa560561.aspx</a></li><li>
Documentation on the AdapterRegistryWizard: <a title="http://msdn2.microsoft.com/en-us/library/ms966446.aspx" href="http://msdn2.microsoft.com/en-us/library/ms966446.aspx">http://msdn2.microsoft.com/en-us/library/ms966446.aspx</a></li></ul></li>
          <li>
You can install the adapter assemblies in the GAC, and then leave out the file paths
in the registry file. From the notes on the registry file:</li>
        </ul>
        <blockquote>
          <p>
For <b>OutboundAssemblyPath</b> and <b>AdapterMgmtAssemblyPath</b> we recommend that
you not include the local path in the property value, because the configuration could
break when installed on different server locations. A better choice is to use a strong
name and install it in the global assembly cache.
</p>
        </blockquote>
        <img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=c2ab901b-5ff9-4eab-b963-2e841266bc86" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.salvoz.com">Adam Salvo</a>. 
</body>
      <title>Install a custom BizTalk Adapter</title>
      <guid isPermaLink="false">http://blog.salvoz.com/PermaLink,guid,c2ab901b-5ff9-4eab-b963-2e841266bc86.aspx</guid>
      <link>http://blog.salvoz.com/2007/10/24/InstallACustomBizTalkAdapter.aspx</link>
      <pubDate>Wed, 24 Oct 2007 22:28:26 GMT</pubDate>
      <description>&lt;p&gt;
Some quick notes on installing a custom BizTalk adapter.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Your assemblies do not have to be in the GAC. I just looked on 2 BizTalk applications
that are installed and running, and the assemblies for the adapters are not in the
GAC 
&lt;li&gt;
I inherited a VS setup project that appears to handle the registry stuff for you.
I don't know if you get this out of the box when creating a new setup project and
adding references to your BizTalk project. 
&lt;li&gt;
You need to register the custom adapters using a registry file. 
&lt;ul&gt;
&lt;li&gt;
This file can be created using a tool that comes in the SDK and is installed on my
computer here: C:\Program Files\Microsoft BizTalk Server 2006\sdk\Utilities\AdapterRegistryWizard 
&lt;li&gt;
Documentation on the Registry File: &lt;a title="http://msdn2.microsoft.com/en-us/library/aa560561.aspx" href="http://msdn2.microsoft.com/en-us/library/aa560561.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa560561.aspx&lt;/a&gt; 
&lt;li&gt;
Documentation on the AdapterRegistryWizard: &lt;a title="http://msdn2.microsoft.com/en-us/library/ms966446.aspx" href="http://msdn2.microsoft.com/en-us/library/ms966446.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms966446.aspx&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
You can install the adapter assemblies in the GAC, and then leave out the file paths
in the registry file. From the notes on the registry file:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt; 
&lt;p&gt;
For &lt;b&gt;OutboundAssemblyPath&lt;/b&gt; and &lt;b&gt;AdapterMgmtAssemblyPath&lt;/b&gt; we recommend that
you not include the local path in the property value, because the configuration could
break when installed on different server locations. A better choice is to use a strong
name and install it in the global assembly cache.
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://blog.salvoz.com/aggbug.ashx?id=c2ab901b-5ff9-4eab-b963-2e841266bc86" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.salvoz.com"&gt;Adam Salvo&lt;/a&gt;. </description>
      <comments>http://blog.salvoz.com/CommentView,guid,c2ab901b-5ff9-4eab-b963-2e841266bc86.aspx</comments>
      <category>Technology/BizTalk</category>
    </item>
  </channel>
</rss>