<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Mikael Håkansson</title><link>http://blogical.se/blogs/mikael/default.aspx</link><description>&lt;span style="font-weight:normal;"&gt;
&amp;quot;Sometimes the road less traveled is less traveled for a reason.&amp;quot; &lt;br /&gt;
&lt;span style="color:Orange;"&gt;- Jerry, in &amp;quot;The Baby Shower&amp;quot; &lt;/span&gt;&lt;/span&gt; </description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/wmmihaa" /><feedburner:info uri="wmmihaa" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwmmihaa" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwmmihaa" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwmmihaa" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/wmmihaa" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwmmihaa" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fwmmihaa" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fwmmihaa" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item><title>Exposing JSON/REST endpoints from BizTalk</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/ZsxdXE12QYo/exposing-json-rest-endpoints-from-biztalk.aspx</link><pubDate>Wed, 07 Mar 2012 13:14:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:29757</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Solutions for &lt;u&gt;consuming&lt;/u&gt; REST services from BizTalk has been around for a while, and &lt;a href="http://www.masteringbiztalk.com/blogs/jon"&gt;Jon Flanders&lt;/a&gt; has an excellent &lt;a href="http://www.masteringbiztalk.com/blogs/jon/PermaLink,guid,90f1db62-b42f-4be3-b9d7-36cd4319c97c.aspx"&gt;post about it&lt;/a&gt;.&amp;nbsp; However, very little has been told about &lt;u&gt;exposing&lt;/u&gt; REST endpoints, and even less using &lt;a href="http://www.json.org/"&gt;JSON&lt;/a&gt;. If you don’t know about JSON, it’s a lightweight data format, commonly used by JavaScript and JQuery. Part from being less verbose then XML, it can be parsed to a object on the client which makes it easier to navigate (as oppose to using XPath). This can come to good rescue for UI devs who apparently don’t understand XPath ;)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/SNAGHTML3e7893f_223E6675.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/SNAGHTML3e7893f_thumb_08D6633B.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SNAGHTML3e7893f" alt="SNAGHTML3e7893f" border="0" height="112" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/SNAGHTML3e6150a_28853D03.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/SNAGHTML3e6150a_thumb_483416CB.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SNAGHTML3e6150a" alt="SNAGHTML3e6150a" border="0" height="110" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/SNAGHTML3da61a3_6BED3E65.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/SNAGHTML3da61a3_thumb_6776BD9E.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SNAGHTML3da61a3" alt="SNAGHTML3da61a3" border="0" height="107" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I haven’t yet been in a situation where I’ve had to expose REST/JSON endpoints from BizTalk, but as &lt;a href="http://kentweare.blogspot.com/"&gt;Kent Weare&lt;/a&gt; was being hackled by &lt;a href="http://weblogs.asp.net/bsimser"&gt;Bil Simser&lt;/a&gt; (MS Word MVP), I was eager to help out.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/channelstack_0B2FE539.jpg"&gt;&lt;img src="http://blogical.se/blogs/mikael/channelstack_thumb_2ADEBF01.jpg" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="channelstack" alt="channelstack" border="0" height="164" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I begun by creating a custom &lt;a href="http://msdn.microsoft.com/en-us/library/aa717047.aspx"&gt;WCF MessageInspector&lt;/a&gt;. My plan was to parse the incoming JSON message to an XML message, and also to change the HTTP verb from GET to POST if the client sent a GET request (BizTalk requires POST). As it turns out, the HTTP verb/Method, can not be changed in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.idispatchmessageinspector.aspx"&gt;IDispatchMessageInspector&lt;/a&gt;. If it was to be changed it would have to be earlier in the channel stack.&lt;/p&gt;  &lt;p&gt;Prior to the MessageInspector is the OperationSelector, so I went on creating one implementing the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.idispatchoperationselector.aspx"&gt;IDispatchOperationSelector&lt;/a&gt; interface. After moving the logic from the inspector to the SelectOperation method in the OperationSelector, I ran into a new problem. The method was never called. It seems BizTalk is adding it’s own OperationSelector through its HostFactory. As I wanted to host the Receive Location in a In-Process host (no IIS), making my own HosFactorythis wouldn’t work either…&lt;/p&gt;  &lt;p&gt;I was forced to dig even deeper in the WCF channel stack. Next step was a custom Encoder. Luckily I found a sample in the &lt;a href="http://msdn.microsoft.com/en-us/library/ms751486.aspx"&gt;SDK&lt;/a&gt; which was pretty easy to use. The only problem was I couldn’t access the HTTP verb. However after all this, I was willing to accept this trade-off.&lt;/p&gt;  &lt;p&gt;Next up was the serialization and deserialization of JSON. Bil Simser pointed me to the &lt;a href="http://json.codeplex.com/"&gt;JSON.Net&lt;/a&gt; project on codeplex, which made it very easy:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;XmlDocument doc = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();
doc.LoadXml(xmlString);

&lt;span class="kwrd"&gt;string&lt;/span&gt; jsonString = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;

&lt;h3&gt;How to use the sample:&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Download the sample &lt;a href="http://blogical.se/files/folders/downloads/entry29758.aspx"&gt;here&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;Either run the bLogical.JsonXmlMessageEncoder.Setup.msi or build and add the bLogical.JsonXmlMessageEncoder to the global assembly cache (GAC). &lt;/li&gt;

  &lt;li&gt;Open BizTalk Administration Console. Browse to Adapters and right-click the WCF-Custom Receive Handler. Select Properties. &lt;/li&gt;

  &lt;li&gt;Click the Import button, and select the WcfExtensions.config file found in the project. &lt;/li&gt;

  &lt;li&gt;Deploy the FortisAlberta project to BizTalk. &lt;/li&gt;

  &lt;li&gt;Import the FortisAlberta.BindingInfo.xml to the FortisAlberta Application &lt;/li&gt;

  &lt;li&gt;Start the FortisAlberta Application. &lt;/li&gt;

  &lt;li&gt;Run the WebApplication1 project, and submit an OutageReport. &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;How to configure a Receive Location manually&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Add a Request/Response Receive Port and Location. &lt;/li&gt;

  &lt;li&gt;Set the transport to WCF-Custom (no need to host it in IIS). &lt;/li&gt;

  &lt;li&gt;Set the binding to &lt;b&gt;customBinding&lt;/b&gt;, and remove the existing binding elements. &lt;/li&gt;

  &lt;li&gt;Add the &amp;quot;jsonXmlMessageEncoder&amp;quot; and the &amp;quot;http transport&amp;quot; extensions. &lt;/li&gt;

  &lt;li&gt;Enable the port. &lt;/li&gt;

  &lt;li&gt;You can use the XmlToJSONConverter that comes with the project to generate the expected JSON format from an XML instance, or use any of the online conversion sites like &lt;a href="http://jsontoxml.utilities-online.info/"&gt;this one&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/SNAGHTML3d49ea3_4A8D98C9.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/SNAGHTML3d49ea3_thumb_1829C54A.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SNAGHTML3d49ea3" alt="SNAGHTML3d49ea3" border="0" height="480" width="351" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;How to call the service&lt;/h3&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

    jQuery.support.cors = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    &lt;span class="kwrd"&gt;var&lt;/span&gt; jsonRequest = &lt;span class="str"&gt;&amp;#39;{&amp;quot;Tweet&amp;quot;:{&amp;quot;Author&amp;quot;:&amp;quot;wmmihaa&amp;quot;,&amp;quot;Text&amp;quot;:&amp;quot;BizTalk Rock!&amp;quot;}}&amp;#39;&lt;/span&gt;;

    &lt;span class="kwrd"&gt;function&lt;/span&gt; ReportOutage() {
        $.ajax({
            type: &lt;span class="str"&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;,
            url: &lt;span class="str"&gt;&lt;a href="http://yourdomain.com/submitTweet"&gt;http://yourdomain.com/submitTweet&lt;/a&gt;&lt;/span&gt;,
            data: jsonRequest,
            contentType: &lt;span class="str"&gt;&amp;quot;application/json; charset=utf-8&amp;quot;&lt;/span&gt;,
            dataType: &lt;span class="str"&gt;&amp;quot;json&amp;quot;&lt;/span&gt;,
            success: &lt;span class="kwrd"&gt;function&lt;/span&gt; (msg) {
                alert(msg);
            },
            error: &lt;span class="kwrd"&gt;function&lt;/span&gt; (xhr, ajaxOptions, thrownError) {
                alert(&lt;span class="str"&gt;&amp;#39;error: &amp;#39;&lt;/span&gt; + thrownError);
            }
        });
    }
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Please not the JSON above: &lt;/p&gt;

&lt;p&gt;“&lt;b&gt;{&amp;quot;Tweet&amp;quot;:{&amp;quot;Author&amp;quot;:&amp;quot;wmmihaa&amp;quot;,&amp;quot;Text&amp;quot;:&amp;quot;XML Rocks!&amp;quot;}}&lt;/b&gt;”. This is going to be translated to: &lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Tweet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;wmmihaa&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;XML Rocks!&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Tweet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;As there are no namespace, you’d need to add one in the receive pipeline. Alternatively, you could add the namespace in JSON: &lt;/p&gt;

&lt;p&gt;&lt;b&gt;{&amp;quot;ns0:Tweet&amp;quot;:{&amp;quot;@xmlns:ns0&amp;quot;:&amp;quot;http://yourns.Tweet&amp;quot;,&amp;quot;Author&amp;quot;:&amp;quot;wmmihaa&amp;quot;,&amp;quot;Text&amp;quot;:&amp;quot;XML Rocks!&amp;quot;}}&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Which would come out as:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ns0:Tweet&lt;/span&gt; &lt;span class="attr"&gt;xmlns:ns0&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://yourns.Tweet&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;wmmihaa&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Author&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;XML Rocks!&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ns0:Tweet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3&gt;How to call the service without using parameters&lt;/h3&gt;

&lt;pre class="csharpcode"&gt;function ReportOutage() {
    $.ajax({
        type: &amp;#39;POST&amp;#39;,
        url: &amp;quot;http://yourdomain.com/submitTweet&amp;quot;,
        data: &amp;#39;{}&amp;#39;, // empty parameter
        contentType: &amp;quot;application/json; charset=utf-8&amp;quot;,
        dataType: &amp;quot;json&amp;quot;,
        success: function (msg) {
            alert(msg);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(&amp;#39;error: &amp;#39; + thrownError);
        }
    });&lt;/pre&gt;



&lt;p&gt;Empty parameters are casted to a message that looks like this: &lt;b&gt;&amp;lt;EmptyJsonMessage/&amp;gt;. &lt;/b&gt;As you won’t have an equivalent schema in BizTalk, you can’t parse it using an XmlReceive pipeline. If you want to process the message in an orchestration, you’d need to set the message type of the incoming message to System.Xml.XmlDocument.&lt;/p&gt;

&lt;h3&gt;Restrictions&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Does not support HTTP GET. &lt;/li&gt;

  &lt;li&gt;Does not support Uri parameters, Eg. http://server/Customers&lt;b&gt;&lt;font style="background-color:#ffff00;"&gt;?id=16&lt;/font&gt;&lt;/b&gt;. &lt;/li&gt;

  &lt;li&gt;The encoder supports both XML and JSON, &lt;u&gt;but not both&lt;/u&gt;. It will be restricted to the media type set on the encoder. &lt;/li&gt;

  &lt;li&gt;In this sample the response can not be handled in a streaming manner. If the size of the response message is bigger then what is read from the client, this is likely to cause a problem. I haven’t experienced this myself, but if you get into this problem, contact me and I’ll look into it. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;HTH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=29757" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/ZsxdXE12QYo" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogical.se/blogs/mikael/archive/tags/REST/default.aspx">REST</category><category domain="http://blogical.se/blogs/mikael/archive/tags/JSON/default.aspx">JSON</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2012/03/07/exposing-json-rest-endpoints-from-biztalk.aspx</feedburner:origLink></item><item><title>Azure Service Bus EAI/EDI December 2011 CTP – Content Based Routing</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/X5CGX1RpKzg/azure-service-bus-eai-edi-december-2011-ctp-content-based-routing.aspx</link><pubDate>Sun, 18 Dec 2011 14:11:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:28750</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In this blog post we are going look at how to manage routing in the new Azure ServiceBus EAI CTP. &lt;/p&gt;  &lt;p&gt;As a scenario, I’m going to send a request for information (RFI) to some of my fellow MVP’s. To do that, I’m going to create a One-Way Xml Bridge, to receive the messages. After receiving the RFI message I tend to route it to one of three queues.&lt;/p&gt;  &lt;h3&gt;1. Create a ServiceBus project&lt;/h3&gt;  &lt;p&gt;If you haven’t already downloaded the SDK, you can do this &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=17691"&gt;here&lt;/a&gt;. After you’ve installed the SDK, you can sign in to the &lt;a href="https://portal.appfabriclabs.com/"&gt;labs environment&lt;/a&gt; using a Windows Live ID.&lt;/p&gt;  &lt;p&gt;Open Visual Studio 2010, and select Create Project. In the list of project templates, select &lt;i&gt;ServiceBus&lt;/i&gt;, and &lt;i&gt;Enterprise Application Integration&lt;/i&gt;. Give it a name and click Ok.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/1_53EBBDFE.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/1_thumb_60E59E0F.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="1" alt="1" width="640" border="0" height="443" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;2. Create a Message Type&lt;/h3&gt;  &lt;p&gt;Right-click the project and select &lt;i&gt;Add-&amp;gt;New Item. &lt;/i&gt;At this time there are two types of artifacts you can add; Schemas and Maps. Select &lt;i&gt;Schema&lt;/i&gt; and sett an appropriate name. In my case I set the name to RFI.xsd. Continue building up your schema. Notice, you don’t have to promote any nodes as you’d have to do in BizTalk.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/2a_4D583E6E.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/2a_thumb_6AEA196D.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="2a" alt="2a" width="640" border="0" height="445" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;3. Designing the Bridge&lt;/h3&gt;  &lt;p&gt;Double-click the BridgeConfiguration.bcs and drag a &lt;i&gt;Xml One-Way Bridge&lt;/i&gt; from the toolbox to the canvas. This is going to be your entry point to your process, similar to a Receive Location in BizTalk. Set the name appropriately, and notice the Router Address which is going to be your endpoint in Azure ServiceBus.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/4_4D288EAE.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/4_thumb_4B679D0D.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="4" alt="4" width="640" border="0" height="378" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;4. Add Queues&lt;/h3&gt;  &lt;p&gt;As stated before, the incoming RFI message is going to be routed to any of the three queues. You might not your message relayed to a queue, and could there for use any of the other Destinations such as &lt;i&gt;Relay&lt;/i&gt;- or &lt;i&gt;External Service EndPoints. &lt;/i&gt;Either way, the principle of routing is the same.&lt;/p&gt;  &lt;p&gt;Connect the &lt;i&gt;Bridge&lt;/i&gt; with all &lt;i&gt;Destinations&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/5_62466E89.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/5_thumb_56447E55.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="5" alt="5" width="624" border="0" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;5. Configure the Bridge&lt;/h3&gt;  &lt;p&gt;Next we’ll define the incoming message type(s). Double-click your Bridge (ReceiveRFI in my case). Click the plus button in the Message Types stage. Select the Message Type you created earlier, and click the arrow button on the right.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/6_5493B281.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/6_thumb_13F16612.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="6" alt="6" width="640" border="0" height="439" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;6. Enrich the Message&lt;/h3&gt;  &lt;p&gt;This is the interesting step, where we are going to promote some fields in the payload so that we can route on these in the next step.&lt;/p&gt;  &lt;p&gt;First open your schema and select the node you care to use for routing (in my case &lt;i&gt;Receive&lt;/i&gt;). Copy the &lt;i&gt;Instance XPath&lt;/i&gt; from the Property window.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/8_12ACCD33.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/8_thumb_714D2796.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="8" alt="8" width="640" border="0" height="475" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then double-click the Bridge, select either of the Enrich stages, and then click the &lt;i&gt;Property Definition&lt;/i&gt; button in the Property window. There are two Enrich stages, as you might be using a Transformation, in which case you might want to promote fields from either the original message or the transformed message.&lt;/p&gt;  &lt;p&gt;For more information about transformations, have a look at Kent’s &lt;a href="http://middlewareinthecloud.com/2011/12/17/azure-service-bus-eaiedi-december-2011-ctp-new-mapper/"&gt;post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/7_5A3EA65A.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/7_thumb_750ACC66.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="7" alt="7" width="566" border="0" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Set the Type to XPath, and paste the XPath expression in the Identifier text box. Select the Message Type and set the name of the property. Finish be setting the data type and click the Add button (+). Close the dialog by clicking the Ok button. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/9_6587BA97.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/9_thumb_3DE13E6D.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="9" alt="9" width="494" border="0" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;7. Set the routing conditions&lt;/h3&gt;  &lt;p&gt;As you have promoted your property (or properties), you’re now ready to set the Filter Conditions on each of the Connectors. Select one of the selectors and type the Filter in the Property window. Eg. receiver=’SteefJan’ or customerId=1234. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/10_15CE8F4E.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/10_thumb_5BDF4C61.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="10" alt="10" width="640" border="0" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;8. Create the Queues&lt;/h3&gt;  &lt;p&gt;Before we deploy the solution, you need to create the queues. There are several tools for this, but with the &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=17691"&gt;samples&lt;/a&gt; comes a MessageReceiver project you can use. &lt;/p&gt;  &lt;p&gt;Type &lt;font face="Courier New"&gt;MessageReceiver.exe &amp;lt;Your namespace&amp;gt; owner &amp;lt;Your issuer key&amp;gt; &amp;lt;Queue name&amp;gt; Create&lt;/font&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;After creating the queues verify they are created in the &lt;a href="https://portal.appfabriclabs.com/"&gt;portal&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/11_28A312F8.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/11_thumb_1F66D7B7.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="11" alt="11" width="640" border="0" height="265" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;9. Deploy your solution&lt;/h3&gt;  &lt;p&gt;Right-click the project and select &lt;i&gt;Deploy&lt;/i&gt;. Supply the secret.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/12_3E3D4B95.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/12_thumb_6B523863.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="12" alt="12" width="640" border="0" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;10. Test the solution&lt;/h3&gt;  &lt;p&gt;Along with the MessageReceiver tool, you’ll find a MessageSender project as well. Just type:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;MessageSender.exe &amp;lt;Your namespace&amp;gt; &amp;lt;Your issuer key&amp;gt; &amp;lt;Your endpoint&amp;gt; &amp;lt;Path to sample file&amp;gt; application/xml&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Use the MessgeReceiver to get the messages from the queues: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/14_29D7860A.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/14_thumb_3494DD5F.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="14" alt="14" width="640" border="0" height="317" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;HTH&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=28750" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/X5CGX1RpKzg" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogical.se/blogs/mikael/archive/tags/EAI/default.aspx">EAI</category><category domain="http://blogical.se/blogs/mikael/archive/tags/ServiceBus/default.aspx">ServiceBus</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/12/18/azure-service-bus-eai-edi-december-2011-ctp-content-based-routing.aspx</feedburner:origLink></item><item><title>Using User-defined tables as stored procedure parameter</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/KnBhBWMD2mk/using-user-defined-tables-as-stored-procedure-parameter.aspx</link><pubDate>Thu, 15 Dec 2011 12:47:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:28599</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The WCF-SQL adapter provides support for multiple inserts through the &lt;i&gt;Consume Adapter Service &lt;/i&gt;feature:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_06EBD8F2.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_269AB2BA.png" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" alt="image" width="541" border="0" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;However, sometimes you might want to validate the data on the SQL side before before making the insert. For instance, if you have a collection of Customers, where some of them might already exist in the database, and should only be updated. In such a case, you’d have to first make a database lookup, to determine the state of the Customer and then make either an insert or update.&lt;/p&gt;  &lt;p&gt;In such a case, using &lt;a href="http://msdn.microsoft.com/en-us/library/bb522526.aspx"&gt;user-defined table types&lt;/a&gt; might be your solution. User-defined tables are similar to ordinary tables, but can be passed in as a parameter.&lt;/p&gt;  &lt;p&gt;In my sample, I have a &lt;i&gt;Contacts&lt;/i&gt; table, and I’m receiving a collection of &lt;i&gt;Persons&lt;/i&gt; where some entities are new and some are to be updated. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_2D4DBC3D.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_78412D0C.png" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" alt="image" width="644" border="0" height="159" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Create the User-Defined Table Type&lt;/h3&gt;  &lt;p&gt;The user-defied table type will serve as our contract. &lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; TYPE [dbo].[InsertContactRequest] &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt;
(
    [PersonNo] [&lt;span class="kwrd"&gt;varchar&lt;/span&gt;](50) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [FirstName] [&lt;span class="kwrd"&gt;varchar&lt;/span&gt;](50) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [LastName] [&lt;span class="kwrd"&gt;varchar&lt;/span&gt;](50) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [Phone] [&lt;span class="kwrd"&gt;varchar&lt;/span&gt;](50) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    &lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt; &lt;span class="kwrd"&gt;KEY&lt;/span&gt; &lt;span class="kwrd"&gt;CLUSTERED&lt;/span&gt; ([PersonNo] &lt;span class="kwrd"&gt;ASC&lt;/span&gt;)&lt;span class="kwrd"&gt;WITH&lt;/span&gt; (IGNORE_DUP_KEY = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;)
)&lt;/pre&gt;

&lt;h3&gt;Create the Stored Procedure&lt;/h3&gt;

&lt;p&gt;The stored procedure takes the user-defined table type as a parameter (@insertContactRequest), then updates all existing rows and inserting all new once.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[sp_InsertContacts] @insertContactRequest InsertContactRequest READONLY
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;UPDATE&lt;/span&gt; dbo.Contacts 
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; Phone = r.Phone
    &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.Contacts c
    &lt;span class="kwrd"&gt;JOIN&lt;/span&gt; @insertContactRequest r &lt;span class="kwrd"&gt;on&lt;/span&gt; r.PersonNo = c.PersonNo

    &lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; dbo.Contacts (PersonNo, FirstName, LastName, Phone)
    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; r.PersonNo, r.FirstName, r.LastName, r.Phone
    &lt;span class="kwrd"&gt;FROM&lt;/span&gt;    @insertContactRequest r
    &lt;span class="kwrd"&gt;WHERE&lt;/span&gt;    r.PersonNo &lt;span class="kwrd"&gt;not&lt;/span&gt; &lt;span class="kwrd"&gt;in&lt;/span&gt;(&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; PersonNo &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.Contacts)
       
END&lt;/pre&gt;

&lt;h3&gt;Generate BizTalk artefacs&lt;/h3&gt;

&lt;p&gt;1. In you Visual Studio, right-click the BizTalk project and select &lt;i&gt;Add-&amp;gt;Add Generated Items&lt;/i&gt;. Select &lt;i&gt;Consume Adapter Service.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_5B0F7334.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_2FCADC2D.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" alt="image" width="644" border="0" height="446" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2. In the &lt;i&gt;Consume Adapter Service &lt;/i&gt;dialog, click the configure button to set the credentials. Click Ok, and then &lt;i&gt;Connect&lt;/i&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_089092F8.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_134DEA4D.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" alt="image" width="542" border="0" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3. In the tree-view, select &lt;i&gt;Strongly Typed Procedures&lt;/i&gt;, and select your stored procedure in the right pane. Click &lt;i&gt;Add&lt;/i&gt; and Ok to generate the schemas.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_79E5E712.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_1994C0DB.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" alt="image" width="644" border="0" height="456" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4. Make your transformation, and complete your solution.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_6011B0E3.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_5FA57DEE.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" alt="image" width="644" border="0" height="456" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/files/folders/downloads/entry28598.aspx"&gt;Here is the sample source.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HTH&lt;/p&gt;

&lt;p&gt;(Kudos Daniel Östberg)&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=28599" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/KnBhBWMD2mk" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogical.se/blogs/mikael/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk+2010/default.aspx">BizTalk 2010</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/12/15/using-user-defined-tables-as-stored-procedure-parameter.aspx</feedburner:origLink></item><item><title>I did it so you don't have to: Connecting to Dynamics CRM Online from BizTalk Server</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/QX-Pth59e6M/i-did-it-so-you-don-t-have-to-connecting-to-dynamics-crm-online-from-biztalk-server.aspx</link><pubDate>Sun, 11 Dec 2011 13:31:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:28410</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2011/12/11/i-did-it-so-you-don-t-have-to-connecting-to-dynamics-crm-online-from-biztalk-server.aspx#comments</comments><description>&lt;b&gt;&lt;/b&gt;  &lt;p&gt;If you’re a consultant like me, you’ve probably got similar calls from some key account manager, as I did yesterday:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;KAM&lt;/b&gt;: &lt;i&gt;Hi Mikael. I’m just about to close this super big deal, with this super important Customer.&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;Really! Good for you.      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;KAM&lt;/b&gt;: &lt;i&gt;Yeah, we’re really close. But to rap it up, I was wondering if you could help me out a bit…      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;Sure. What do you have in mind?&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;KAM&lt;/b&gt;: &lt;i&gt;Could you come with me to meeting with the customer on Monday? (this happens on Thursday 6PM)      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;Me&lt;/b&gt; (getting suspicious): &lt;i&gt;mmm…What do you want me to do?      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;KAM&lt;/b&gt;: &lt;i&gt;A demo!      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;Demo of what?      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;KAM&lt;/b&gt;: &lt;i&gt;The customer want us to show how to integrate Dynamics CRM Online with SAP using BizTalk.      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;What?      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;KAM&lt;/b&gt;: &lt;i&gt;Yes, yes. The customer wants us to show it live!&lt;/i&gt; &lt;i&gt;You know, they want to see you do it…&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;ARE YOU HIGH? (I didn’t actually say that, but I was thinking it)      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;It will not happen! I haven&amp;#39;t worked with SAP since 3-4 year ago. I’ve never worked with CRM Online (or off-line for that matter). I’m fully booked tomorrow, and I want to spend the weekend with my family as X-mas is coming up.      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;KAM&lt;/b&gt;: &lt;i&gt;But we need to close this deal…&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;NO!      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;KAM&lt;/b&gt;: &lt;i&gt;Please…      &lt;br /&gt;&lt;/i&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;No way!      &lt;br /&gt;&lt;/i&gt;(Yada, yada, yada)     &lt;br /&gt;&lt;b&gt;Me&lt;/b&gt;: &lt;i&gt;Ok, I’ll give it a try (&lt;b&gt;I’M SUCH AN IDIOT!!!!!&lt;/b&gt;)       &lt;br /&gt;&lt;/i&gt;&lt;/p&gt;  &lt;h3&gt;So here it is: How to connect to Dynamics CRM Online from BizTalk Server&lt;/h3&gt;  &lt;p&gt;To begin with, if you want to integrate with CRM Online, you have two options. Either use an un-typed web-service API or use a tool called &lt;a href="http://blog.abodit.com/2011/03/crmsvcutil-exe-with-microsoft-dynamics-crm-2011-online-problem/"&gt;CrmSvcUtil.exe&lt;/a&gt; to create a proxy class for you. Each of these comes with some challenges and limitations:&lt;/p&gt;  &lt;p&gt;Using an un-typed web service, can of course be somewhat messy, but the SDK provides you with the schemas you need (more on that later). The biggest challenge, however, is to authenticate to the service as it assumes you’re using Windows Live Id. Authenticating against the service would require an additional four calls to the service to finally get the authentication tokens needed to create the security header. An then figure out a way to to add the headers in a pipeline. The steps needed are described by Girish Raja &lt;a href="http://code.msdn.microsoft.com/CRM-Online-2011-WebServices-14913a16"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The proxy created using the CrmSvcUtil is quite nice, since it’s typed, but of course I can’t use it in a send port. I would&amp;nbsp; have to make the call using the inline-send approach from within an expression shape in an orchestration. And thereby loose the built in re-send functionality and more, that ships with BizTalk.&lt;/p&gt;  &lt;p&gt;As none of these approaches was acceptable, I begun looking for other alternatives. What I really wanted was an authentication behavior, that I could add to my WCF-Custom send port adapter.&amp;nbsp; &lt;/p&gt;  &lt;h3&gt;Building the Custom WCF Behavior&lt;/h3&gt;  &lt;p&gt;What I needed was a Message Inspector that would build up the security header as Girish Raja did in his sample, and then add that header to the SOAP envelope. This class is called &lt;i&gt;LiveIdAuthenticationMessageInspector&lt;/i&gt; and inherits from &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iclientmessageinspector.aspx"&gt;IClientMessageInspector&lt;/a&gt;&lt;i&gt;&lt;/i&gt;. This gives two methods to my class: &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iclientmessageinspector.beforesendrequest.aspx"&gt;BeforeSendRequest&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iclientmessageinspector.afterreceivereply.aspx"&gt;AfterReceiveReply&lt;/a&gt;.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; BeforeSendRequest(&lt;span class="kwrd"&gt;ref&lt;/span&gt; System.ServiceModel.Channels.Message request, 
    System.ServiceModel.IClientChannel channel)
{
    &lt;span class="kwrd"&gt;string&lt;/span&gt; securityHeader = HeaderHelper.GetSecurityHeader(&lt;span class="kwrd"&gt;this&lt;/span&gt;._username, &lt;span class="kwrd"&gt;this&lt;/span&gt;._password, &lt;span class="kwrd"&gt;this&lt;/span&gt;._crmUri);
            
    request.Headers.Add(MessageHeader.CreateHeader(&lt;span class="str"&gt;&amp;quot;Security&amp;quot;&lt;/span&gt;,
        WSSecurityUsernameTokenProfileNamespace,
        &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty,
        &lt;span class="kwrd"&gt;new&lt;/span&gt; SecurityHeaderSerializer(securityHeader),&lt;span class="kwrd"&gt;true&lt;/span&gt;));

    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
}&lt;/pre&gt;

&lt;p&gt;In the BeforeSendRequest method is where I can add the security header to the message before the message is sent out. The the BeforeSendRequest method I call a helper class returning the actual header. The GetSecurityHeader method is going through four steps to build up the header:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Get Windows Live Device Credentials &lt;/li&gt;

  &lt;li&gt;Register Device Credentials and get binaryDAToken &lt;/li&gt;

  &lt;li&gt;Get Security Token by sending WLID username, password and device binaryDAToken &lt;/li&gt;

  &lt;li&gt;Build up the security header with the token from previous step. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;b&gt;(This sample does not cache the tokens! I strongly suggest you add some caching logic before you run this in production)&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;After the header is created it is added to the request, using a custom serializer, as it would otherwise be HTML encoded. &lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; AfterReceiveReply(&lt;span class="kwrd"&gt;ref&lt;/span&gt; System.ServiceModel.Channels.Message reply, &lt;span class="kwrd"&gt;object&lt;/span&gt; correlationState)
{
    Trace.WriteLine(&lt;span class="str"&gt;&amp;quot;[bLogical] LiveIdAuthenticationMessageInspector:AfterReceiveReply called&amp;quot;&lt;/span&gt;);
    &lt;span class="kwrd"&gt;int&lt;/span&gt; index = reply.Headers.FindHeader(&lt;span class="str"&gt;&amp;quot;Security&amp;quot;&lt;/span&gt;, WSSecurityUsernameTokenProfileNamespace);
    reply.Headers.RemoveAt(index);
}&lt;/pre&gt;

&lt;p&gt;When BizTalk (or any other WCF client) receives the response it will throw an exception, as it doesn’t understand the Security header. I might have gone away with adding the http:&lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" title="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"&gt;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&lt;/a&gt; schema to BizTalk, but as I don’t need it, I just removed it from the header on the way back.&lt;/p&gt;

&lt;p&gt;Part from the Message Inspector, I also added an EndpointBehavior and a BehaviorExtensionElement. The LiveIdAuthenticationBehaviorExtensionElement needs to be registered in the configuration using the behavior in BizTalk&lt;/p&gt;

&lt;p&gt;After you have registered the behavior, you can focus on the normal BizTalk tasks like building orchestrations and mappings. To get started with consuming the CRM Services, have a look at Richards &lt;a href="http://seroter.wordpress.com/2011/02/10/the-good-bad-and-ugly-of-integrating-dynamics-crm-2011-and-biztalk-server-2010/"&gt;post&lt;/a&gt;. The only thing I’d like to emphasis is that the correct schemas are part of the SDK (sdk\schemas). After you run the &lt;i&gt;Consume WCF Service &lt;/i&gt;Wizard, remove all schemas and replace them with the the once in the SDK. Better yet, put all those schemas in a separate schema project, and reference that project from other projects where you’re using them. &lt;/p&gt;

&lt;h4&gt;1. Add the behavior to the Global Assembly Cache&lt;/h4&gt;

&lt;p&gt;Open up the &lt;i&gt;LiveIdAuthentication&lt;/i&gt; project, build and add it to the global assembly cache.&lt;/p&gt;

&lt;h4&gt;2. Register the behavior in the configuration&lt;/h4&gt;

&lt;p&gt;(sorry about the formatting). &lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;extensions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviorExtensions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;liveIdAuthentication&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;LiveIdAuthentication.LiveIdAuthenticationBehaviorExtensionElement, LiveIdAuthentication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=698ceec8cebc73ae&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviorExtensions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;extensions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;You can do this either in a config file (machine.config or BTSNTSvc[64].exe.config) or in BizTalk (WCF-Custom Send handler):&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_167D68DB.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_03C86F24.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" alt="image" height="484" width="376" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I prefer the later as I would otherwise need to make the changes to all the servers in the group. Just copy the extension element above, into a config file, and import the file from the Transport Properties dialog above. Or you can point to the app.config file in the sample.&lt;/p&gt;

&lt;h4&gt;3. Add the Endpoint Behavior&lt;/h4&gt;

&lt;p&gt;Open the send port and click the &lt;i&gt;Configure &lt;/i&gt;button to open the WCF Transport Porperties. Select the &lt;i&gt;Behavior&lt;/i&gt; tab and right-click the Endpoint behavior node, and select &lt;i&gt;Add extension. &lt;/i&gt;Select the &lt;i&gt;&lt;b&gt;liveAuthentication&lt;/b&gt;&lt;/i&gt; extensions. Select the extension and set the properties.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_49D92C37.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_2951EC85.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" alt="image" height="484" width="348" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;You’re done.&lt;/p&gt;

&lt;p&gt;Use this code as you like, and on your own risk. If you make improvements, I’d appreciate if you notify me. One thing I know could be done better, would be to cache the tokens and re-use them for the next call.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/files/folders/downloads/entry28440.aspx"&gt;Download the Dynamics CRM LiveId Authentication Behavior sample here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;HTH&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=28410" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/QX-Pth59e6M" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Adapters/default.aspx">Adapters</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Dynamics+CRM+Online/default.aspx">Dynamics CRM Online</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/12/11/i-did-it-so-you-don-t-have-to-connecting-to-dynamics-crm-online-from-biztalk-server.aspx</feedburner:origLink></item><item><title>Recordings from Enfo Integration Days are available</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/ciUxvPrbzLY/recordings-from-enfo-integration-days-are-available.aspx</link><pubDate>Mon, 28 Nov 2011 18:00:36 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:28222</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2011/11/28/recordings-from-enfo-integration-days-are-available.aspx#comments</comments><description>&lt;p&gt;Every year my employer hosts a two day event all related to integration or service orientation. Around 450 people attended this year, which I assumes makes it the biggest event of the year in the integration space, with more then 25 sessions on four different tracks. All Microsoft related session were recorded and are now available. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=5cLQBMeS-aU"&gt;Microsoft BizTalk Server and Microsoft’s Middleware vision&lt;/a&gt; (Marcus Gullberg, Microsoft) –SWEDISH&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=IqDPmW2Fdts"&gt;Microsoft BizTalk Server &amp;amp; Windows Azure AppFabric&lt;/a&gt; (Mikael Håkansson, Enfo Zystems) –SWEDISH&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=cPK4rr8HsYY"&gt;Windows Azure AppFabric Platform futures&lt;/a&gt; (Johan Hedberg, Enfo Zystems) –SWEDISH&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=RyAQ-9JQtl0"&gt;BaseLine for BizTalk Hands On&lt;/a&gt; (Martin Rydman &amp;amp; Mikael Håkansson, Enfo Zystems ) –SWEDISH&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=Q-ONkEVD-tw"&gt;Using AppFabric Cache to Maximize the Performance of Your Windows Azure and On Premises WCF Applications&lt;/a&gt; (Paolo Salvatori, Microsoft) –ENGLISH&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=PymrPY9jdqQ"&gt;How to integrate BizTalk Server with Windows Azure Service Bus Messaging. &lt;/a&gt;(Paolo Salvatori, Microsoft) –ENGLISH&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Enjoy, an we hope you join us next year.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogical.se/blogs/mikael/image_7BDB1DF6.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=28222" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/ciUxvPrbzLY" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/11/28/recordings-from-enfo-integration-days-are-available.aspx</feedburner:origLink></item><item><title>Enfo Zystems is sponsoring a two day event focusing all on integration.</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/7ZXM88p-tzQ/enfo-zystems-is-sponsoring-a-two-day-event-focusing-all-on-integration.aspx</link><pubDate>Wed, 14 Sep 2011 19:59:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:27553</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2011/09/14/enfo-zystems-is-sponsoring-a-two-day-event-focusing-all-on-integration.aspx#comments</comments><description>&lt;h2&gt;Welcome to Integration days 2011!&lt;/h2&gt;  &lt;p&gt;If you are in the integration space, you’ll find all kinds of interesting and valuable sessions in any of the four tracks; &lt;i&gt;Strategy, Public, Microsoft&lt;/i&gt; and &lt;i&gt;IBM&lt;/i&gt;. Each track has six sessions with speakers from both &lt;a href="http://zystems.se"&gt;Enfo Zystems&lt;/a&gt; and other partner organizations such as Microsoft.&lt;/p&gt;  &lt;p&gt;At Thursday evening, you’re invited for dinner with entertainment, which of course will be a great time to meet up with other integration geeks (such as myself…)&lt;/p&gt;  &lt;p&gt;And the best of all…&lt;b&gt; –It’s all free, so &lt;/b&gt;&lt;a href="http://integrationdays.com"&gt;&lt;b&gt;sign up now!&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://integrationdays.com"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_7BDB1DF6.png" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" alt="image" border="0" height="85" width="323" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;The event starts on the 13&lt;sup&gt;th&lt;/sup&gt;of October and covers four tracks, each with six sessions. The Microsoft platform track will cover the following six sessions: &lt;/p&gt;  &lt;h3&gt;Microsoft BizTalk Server and Microsoft’s Middleware vision&lt;/h3&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;p&gt;&lt;i&gt;BizTalk Server has been at the center of Microsoft’s Middleware platform for a number of years, to provide a rich set of capabilities for services and integration. AppFabric, both on-premise and on Windows Azure provides additional capabilities as well as some overlapping ones. So what is the strategy here, what is Microsoft up to long term and short term? How will this affect solutions you create and what opportunities will it create for your company? In this session, you will get the answers to these questions.&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;Presenter: Marcus Gullberg, PM Microsoft Sweden&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Microsoft BizTalk Server &amp;amp; Windows Azure AppFabric&lt;/h3&gt;  &lt;p&gt;&lt;i&gt;Microsoft’s Middleware platform is currently undergoing a change, which in turn offers different solutions with unique capabilities. What is available today, and how can we today make these solutions work together? This session will cover Microsoft BizTalk Server, Windows Server AppFabric and Azure AppFabric, to show how you can extend the reach of your integration platform outside your own domain.&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;Presenter: Mikael Håkansson, Solution Architect, Enfo Zystems&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Windows Azure AppFabric Platform futures &lt;/h3&gt;  &lt;p&gt;&lt;i&gt;Where is the future of Microsoft’s Middleware platform going? How will we design, build and monitor our solutions in the future? What capabilities will we have in our tool box? These and many other questions will be addressed in this session, which will focus on Microsoft Azure AppFabric Platform and emerging capabilities such as Composite Application, Access Control Center, Caching, ServiceBus Topics &amp;amp; Queues and other enhancements, and Integration. &lt;/i&gt;    &lt;br /&gt;&lt;b&gt;Presenter: Johan Hedberg, Solution Architect, Enfo Zystems&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Using AppFabric Cache to Maximize the Performance of Your Windows Azure and On Premises WCF Applications&lt;/h3&gt;  &lt;p&gt;&lt;i&gt;Caching is an integral part of an overall scaling strategy. By properly utilizing caching you can radically increase the number of concurrent users your application can service. Much of the caching information available to users today only focuses on server side caching. Server side caching is important, we will cover it in this session, and we will show concrete techniques to maximize its effectiveness . However, this session will also cover client side caching techniques. Client side techniques are often overlooked in spite of the fact that in order to truly hit extreme scale those techniques are nearly always necessary and often end up being bolted on after the fact. After attending this session, the attendees will walk away with the concrete knowledge and code necessary to immediately improve their WCF application performance.&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;Presenter: Paolo Salvatori and Mikael Håkansson      &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;  &lt;h3&gt;Deep dive: How to integrate BizTalk Server with Windows Azure Service Bus Messaging&lt;/h3&gt;  &lt;p&gt;&lt;i&gt;The Windows Azure AppFabric Service Bus and Windows Azure Connect are the foundation for building a new class of distributed and hybrid applications that span the cloud and on premises environments. The Service Bus is an Internet-scale Service Bus that offers secure, scalable and highly available connectivity and messaging capabilities. Windows Azure Connect provides a network-level bridge between applications and services running in the cloud and on-premises data centers. Windows Azure Connect makes it easier for an organization to migrate their existing applications to the cloud by enabling direct IP-based network connectivity with their existing on-premises infrastructure. In this session you will see how to integrate these technologies with BizTalk Server to create solid and cloud-ready solutions.&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;Presenter: Paolo Salvatori, &lt;i&gt;Senior Program Manager Microsoft&lt;/i&gt;&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Baseline for BizTalk Hands-on&lt;/h3&gt;  &lt;p&gt;&lt;i&gt;Baseline provides a comprehensive framework that supports the design, development and maintenance of systems integration solutions. In this session we will provide a practical example of how to use the Baseline methodology and tools to refine project requirements into a working BizTalk solution – tested, documented and packaged, ready for deployment in BizTalk Server 2010. In the process we will use Baseline documents and the Baseline Portal to highlight the main strengths of Baseline.&lt;/i&gt;     &lt;br /&gt;&lt;b&gt;Presenter: Martin Rydman and Mikael Håkansson&lt;/b&gt;&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=27553" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/7ZXM88p-tzQ" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Fun/default.aspx">Fun</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk+2010/default.aspx">BizTalk 2010</category><category domain="http://blogical.se/blogs/mikael/archive/tags/AppFabric/default.aspx">AppFabric</category><category domain="http://blogical.se/blogs/mikael/archive/tags/AppFabic+Cache/default.aspx">AppFabic Cache</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Event/default.aspx">Event</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/09/14/enfo-zystems-is-sponsoring-a-two-day-event-focusing-all-on-integration.aspx</feedburner:origLink></item><item><title>Scripts used at my TechEd session (MID309 | Configuring Microsoft BizTalk Server for Performance)</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/HcKwdOH4_qQ/scripts-used-at-my-teched-session-mid309-configuring-microsoft-biztalk-server-for-performance.aspx</link><pubDate>Sun, 22 May 2011 18:52:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:25309</guid><dc:creator>wmmihaa</dc:creator><slash:comments>1</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2011/05/22/scripts-used-at-my-teched-session-mid309-configuring-microsoft-biztalk-server-for-performance.aspx#comments</comments><description>&lt;p&gt;Thanks to everyone attending my TechEd session on Thursday. You can find the scripts I was running &lt;a href="http://blogical.se/files/folders/downloads/entry25306.aspx" target="_blank"&gt;here&lt;/a&gt; (sorry I didn’t put them up earlier). Let me know if you have any trouble.&lt;/p&gt;
&lt;p&gt;If you didn’t attend, you can view the session online &lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/MID309" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_65E4E344.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogical.se/blogs/mikael/image_thumb_400EBCE1.png" width="644" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Good luck&lt;/p&gt;
&lt;p&gt;//Mikael&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=25309" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/HcKwdOH4_qQ" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk+2010/default.aspx">BizTalk 2010</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Performance/default.aspx">Performance</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/05/22/scripts-used-at-my-teched-session-mid309-configuring-microsoft-biztalk-server-for-performance.aspx</feedburner:origLink></item><item><title>Demos from the How to do integration with Office365 and On-Premise Applications at TechEd (MID372-INT)</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/fiHRS6U1psQ/demos-from-the-how-to-do-integration-with-office365-and-on-premise-applications-at-teched-mid372-int.aspx</link><pubDate>Wed, 18 May 2011 16:51:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:25154</guid><dc:creator>wmmihaa</dc:creator><slash:comments>2</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2011/05/18/demos-from-the-how-to-do-integration-with-office365-and-on-premise-applications-at-teched-mid372-int.aspx#comments</comments><description>&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Thanks to everyone attending my session on integration with
Office365 and on-prem applications.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3" face="Calibri"&gt;All demos can be downloaded from here: &lt;/font&gt;&lt;a href="http://blogical.se/files/folders/downloads/entry25152.aspx"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;http://blogical.se/files/folders/downloads/entry25152.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;p style="margin:0cm 0cm 10pt;" class="MsoNormal"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;I recommended you to start downloading the AppFabric SDK CTP,
in which you’ll find the ClientAccessPolicyPublisher sample I was running in
the last sample: &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d89640fc-c552-446e-aead-b1e0d940f31b"&gt;&lt;font color="#0000ff" size="3" face="Calibri"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d89640fc-c552-446e-aead-b1e0d940f31b&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;font size="3" face="Times New Roman"&gt;

&lt;/font&gt;&lt;span style="line-height:115%;font-size:11pt;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-theme-font:minor-bidi;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Good luck and let me know if you need any
additional help.&lt;/span&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=25154" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/fiHRS6U1psQ" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk+2010/default.aspx">BizTalk 2010</category><category domain="http://blogical.se/blogs/mikael/archive/tags/AppFabric/default.aspx">AppFabric</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Office365/default.aspx">Office365</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/05/18/demos-from-the-how-to-do-integration-with-office365-and-on-premise-applications-at-teched-mid372-int.aspx</feedburner:origLink></item><item><title>Top 10 Things to Know When Integrating with Line of Business Systems</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/lrQQOLKTdnQ/top-10-things-to-know-when-integrating-with-line-of-business-systems.aspx</link><pubDate>Mon, 09 May 2011 21:39:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:24753</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2011/05/09/top-10-things-to-know-when-integrating-with-line-of-business-systems.aspx#comments</comments><description>&lt;p&gt;We are once again fortunate to have prominent speakers visiting our user group in Sweden. This time it&amp;#39;s &lt;a href="http://kentweare.blogspot.com/"&gt;Kent Weare&lt;/a&gt; and &lt;a href="http://seroter.wordpress.com/"&gt;Richard Seroter&lt;/a&gt;. Both of them have been here before, and have both been much appreciated speakers. (BTW if you are aware of any challenges happening in Sweden at the time of the event such as Iron man, marathon or cage fighting let me know so we can sign up Kent).&lt;/p&gt;  &lt;p&gt;Kent Weare recently led a team of authors in their production of the book Microsoft BizTalk 2010: Integrating with Line of Business Systems (Packt Publishing, 2011).&amp;nbsp; This book walks through multiple technologies and how to integrate with them via BizTalk Server 2010.&amp;nbsp; Join Kent and Richard as they deliver the Top 10 Things to Know When Integrating with Line of Business Systems.    &lt;br /&gt;In these sessions, they will walk us through numerous key principles to follow when doing system integration and they will draw inspiration from their new book.&amp;nbsp; These principles will be demonstrated by integrating BizTalk Server 2010 with SharePoint, Windows Azure, SAP and software-as-a-service providers.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Monday the 13th of June 18:00 at Microsofts office in Akalla&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;If you have an opportunity to join us, &lt;a href="http://swebug20110613.eventbrite.com/"&gt;sign up&lt;/a&gt;. If you need help booking travel arrangements such as hotel, let us know by dropping us an email.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;b&gt;Welcome &lt;/b&gt;&lt;/p&gt;  &lt;div style="text-align:center;width:195px;"&gt;&lt;iframe src="http://www.eventbrite.com/countdown-widget?eid=1662995063" marginheight="0" mce_src="http://www.eventbrite.com/countdown-widget?eid=1662995063" marginwidth="0" frameborder="0" height="472" scrolling="no" width="220"&gt;&lt;/iframe&gt;    &lt;div style="text-align:center;padding-bottom:5px;margin:2px;padding-left:0px;width:195px;padding-right:0px;font-family:helvetica, arial;font-size:10px;padding-top:5px;"&gt;&lt;a href="http://www.eventbrite.com/features?ref=ecount" style="color:#ddd;text-decoration:none;" target="_blank"&gt;Online event registration&lt;/a&gt;&lt;span style="color:#ddd;"&gt; for &lt;/span&gt;&lt;a href="http://swebug20110613.eventbrite.com?ref=ecount" style="color:#ddd;text-decoration:none;" target="_blank"&gt;Top 10 Things to Know When Integrating with Line of Business Systems &lt;/a&gt;&lt;/div&gt; &lt;/div&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=24753" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/lrQQOLKTdnQ" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/User+Group/default.aspx">User Group</category><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk+2010/default.aspx">BizTalk 2010</category><category domain="http://blogical.se/blogs/mikael/archive/tags/LOB+Adapters/default.aspx">LOB Adapters</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/05/09/top-10-things-to-know-when-integrating-with-line-of-business-systems.aspx</feedburner:origLink></item><item><title>PowerShell cmdlet for BizTalk db restore</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/kjCENg7SsL4/powershell-cmdlet-for-biztalk-db-restore.aspx</link><pubDate>Tue, 22 Feb 2011 07:59:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:22241</guid><dc:creator>wmmihaa</dc:creator><slash:comments>4</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2011/02/22/powershell-cmdlet-for-biztalk-db-restore.aspx#comments</comments><description>&lt;p&gt;Configuring the backup job for BizTalk is a fairly simple task, while restoring it is a bit more complicated. By default the BizTalk backup job makes a full backup once a day, and a log backup every 15 minutes. When backups are done, a mark is set on each file. This mark is the same across all databases, and should be used to restore all databases to the same point in time and keeping all databases in a consistent state. –Also, by default, all backups are made to the same directory folder.&lt;/p&gt;
&lt;p&gt;The only supported disaster recovery procedure from Microsoft is &lt;a href="http://msdn.microsoft.com/en-us/library/ee308796%28v=BTS.10%29.aspx"&gt;log-shipping&lt;/a&gt;. &lt;a href="http://www.modhul.com/tag/backup-and-restore/"&gt;Nick Heppleston&lt;/a&gt; has gone through the trouble of describing this in great detail, and I strongly recommend to read these post before you choose to use any other approach. &lt;/p&gt;
&lt;p&gt;A few weeks ago, I sent out a question on twitter, asking whether people used log-shipping or not. I got 24 responses where only 4 used log-shipping. &lt;/p&gt;
&lt;p&gt;Although log-shipping comes with many advantages, it is still expensive since it requires a secondary SQL cluster. Most of the people I asked confirmed this was the main reason why they had chosen other alternatives. Since BizTalk doesn’t come with any restore scripts/features other than log-shipping, everyone is left to fix this on their own.&lt;/p&gt;
&lt;p&gt;If you’re in the same situation, feel free to &lt;a href="http://blogical.se/files/folders/downloads/entry22218.aspx"&gt;download this sample&lt;/a&gt;. If it doesn’t fit your solution, it might at least be a good starting point. &lt;/p&gt;
&lt;p&gt;The sample comes with two cmdlet’s: &lt;font face="courier new,courier" size="2"&gt;Get-Marks&lt;/font&gt; and &lt;font face="courier new,courier" size="2"&gt;New-RestoreDatabaseFromMark&lt;/font&gt;. The first one gives you a list of all marks from all log files. The second one, as the name implies, restores a database to a specific mark. When doing so, the database will be restored from the last full backup before the mark. After that, all log files will be restored in order from the full backup. The last log file will only be restored to the specified mark. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_28C88F73.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_7D17C576.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="640" border="0" height="328" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;font face="courier new,courier"&gt;&lt;font size="2"&gt;Get-Mark&lt;/font&gt; &lt;/font&gt;cmdlet queries the backup output folder to retrieve all marks. The mark is part of the name of each backup file:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_14C0A25F.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_2B9F73DB.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="564" border="0" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Each file is made up of the following parts:&lt;/p&gt;
&lt;p&gt;[Server]_[Instance*]_[Database]_[Full|Log]_[Mark]&lt;/p&gt;
&lt;p&gt;Eg: SERVER001_DTA_BizTalkDTADb_Log_&lt;b&gt;BTS_2011_01_18_12_06_50_22&lt;/b&gt;.bak &lt;br /&gt;* The instance is only present for none default instances. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;You can use the &lt;font face="courier new,courier"&gt;&lt;font size="2"&gt;New-RestoreDatabaseFromMark&lt;/font&gt; &lt;/font&gt;cmdlet with or without specifying the mark. Leaving the mark empty is eqvivilent to last mark.&lt;/p&gt;
&lt;p&gt;The &lt;font face="courier new,courier"&gt;&lt;font size="2"&gt;New-RestoreDatabaseFromMark&lt;/font&gt; &lt;/font&gt;cmdlet is called per database, why it&amp;#39;s easier to create a script for restoring all databases together. The sample comes with a RestoreScript.ps1 script file, which could work as a good start:&lt;/p&gt;&lt;pre class="csharpcode"&gt;$backupPath = &lt;span class="str"&gt;&amp;quot;X:\BizTalkBackUp&amp;quot;&lt;/span&gt;;&lt;br /&gt;$dataPath = &lt;span class="str"&gt;&amp;quot;E:\SQL Server 2008\MSSQL10.MSSQLSERVER\MSSQL\DATA&amp;quot;&lt;/span&gt;;&lt;br /&gt;$logPath = &lt;span class="str"&gt;&amp;quot;E:\SQL Server 2008\MSSQL10.MSSQLSERVER\MSSQL\DATA&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;$mark = Read-Host &lt;span class="str"&gt;&amp;quot;Specify mark (use the Get-Marks cmdlet to get all marks or blank to use last mark)&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; ($mark.Length -eq 0)&lt;br /&gt;{&lt;br /&gt;    Write-Output &lt;span class="str"&gt;&amp;quot;Restoring to last mark...&amp;quot;&lt;/span&gt;;&lt;br /&gt;    $mark=&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;New-RestoreDatabaseFromMark SSODB $backupPath $dataPath $logPath $mark;&lt;br /&gt;New-RestoreDatabaseFromMark BAMPrimaryImport $backupPath $dataPath $logPath $mark;&lt;br /&gt;New-RestoreDatabaseFromMark BizTalkDTADb $backupPath $dataPath $logPath $mark;&lt;br /&gt;New-RestoreDatabaseFromMark BizTalkMgmtDb $backupPath $dataPath $logPath $mark;&lt;br /&gt;New-RestoreDatabaseFromMark BizTalkMsgBoxDb $backupPath $dataPath $logPath $mark;&lt;br /&gt;New-RestoreDatabaseFromMark BizTalkRuleEngineDb $backupPath $dataPath $logPath $mark;&lt;br /&gt;&lt;br /&gt;trap [Exception] &lt;br /&gt;{&lt;br /&gt;    Exit;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Write-Output &lt;span class="str"&gt;&amp;quot;Done restoring all BizTalk databases&amp;quot;&lt;/span&gt; -foregroundcolor &lt;span class="str"&gt;&amp;quot;yellow&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;The first section of the script defines a set of path variables. In my simple sample, all database files are located in the same folder. This is never a good practice, why you probably have different paths for data- and log files for each database.&lt;/p&gt;
&lt;p&gt;To use the sample, open PowerShell and navigate to the sample output folder. Eg:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="3"&gt;PS C:\&amp;gt; CD “c:\Program Files\bLogical.BizTalkManagement”&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Before you can use the cmdlets, you need to install them. You can do this using the install script:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="3"&gt;PS C:\Program Files\bLogical.BizTalkManagement&amp;gt; &lt;b&gt;Install.ps1&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;After you’ve installed the snapins, you can start using the commands:&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="3"&gt;PS C:\Program Files\bLogical.BizTalkManagement&amp;gt; &lt;b&gt;Get-Mark &amp;quot;X:\BizTalkBackUp&amp;quot;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;font face="Courier New" size="3"&gt;PS C:\Program Files\bLogical.BizTalkManagement&amp;gt; &lt;b&gt;MyRestoreScript.ps1&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_6873F5AD.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_0DFD730F.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" width="640" border="0" height="409" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogical.se/files/folders/downloads/entry22218.aspx"&gt;Downloads&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;HTH&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=22241" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/kjCENg7SsL4" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Disaster+and+Recovery/default.aspx">Disaster and Recovery</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/02/22/powershell-cmdlet-for-biztalk-db-restore.aspx</feedburner:origLink></item><item><title>Using AppFabric Cache as WF Persistence store</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/637qdVXj4rM/using-appfabric-cache-as-wf-persistence-store.aspx</link><pubDate>Tue, 01 Feb 2011 20:00:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:21763</guid><dc:creator>wmmihaa</dc:creator><slash:comments>2</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2011/02/01/using-appfabric-cache-as-wf-persistence-store.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/paolos/"&gt;Paolo Salvatori&lt;/a&gt; and I, had this idea about using AppFabric Cache as a workflow persistence provider. As we’ve been working on this for quite some time now, we’re happy to finally share the work with everyone else thinking about how workflow persistence work, or perhaps thinking of building your own provider.&lt;/p&gt;  &lt;p&gt;Developing your own persistence provider is not the simplest task you can take on, but it’s perfectly doable. I was surprised by the absence of persistence provider samples on the web. The only helpful one I could find was the &lt;a href="http://wf.codeplex.com"&gt;MemoryStore&lt;/a&gt;, which helped me get started. &lt;/p&gt;  &lt;p&gt;The funny thing with this sample was that I spent most of the time, trying to figure out why it worked, not why it didn’t. &lt;/p&gt;  &lt;p&gt;I want to thank &lt;a href="http://blogs.msdn.com/b/paolos/"&gt;Paolo Salvatori&lt;/a&gt;, Manu Srivastava and Ruppert Koch from the AppFabric CAT and Product group for helping out and clarifying how the underlying plumbing works. More on that at the end of this post.&lt;/p&gt;  &lt;h3&gt;What is Workflow Persistence?&lt;/h3&gt;  &lt;p&gt;Unless we enable persistence, a workflow instance is only stored in memory. If the host goes down, it will take any evidence of your workflow instance with it. The process of persisting a workflow to a durable repository or storage is known as dehydration while restoring it, is generally referred to as rehydration. If you are a BizTalk person, you are probably aware that the persistence store for BizTalk is the BizTalkMsgBoxDb database. &lt;/p&gt;  &lt;p&gt;Much like BizTalk, Workflow Foundation comes with a SQL persistence store, - the SqlWorkflowInstanceStoreProvider. However, with WF it’s optional. -Not only to use persistence, but you are also free to choose other providers, or even build one yourself. &lt;/p&gt;  &lt;p&gt;You can enable the persistence either through configuration or code. If you’re hosting your workflow in IIS/AppFabric you can even manage your persistence through the IIS Manager. &lt;/p&gt;  &lt;h3&gt;Why and when would we use persistence?&lt;/h3&gt;  &lt;p&gt;You might end up using persistence for different reasons, which might also have an impact on which provider you’d choose. As I’m a “BizTalk guy”, I generally think of persistence in terms of 1) A safety-net in case something goes wrong and 2) Resource management, off-loading running instances to prevent memory consumption. In most cases you’re looking for a safe and robust provider to make sure you are not going to lose sensitive data along with the internal state of the workflow instance. &lt;/p&gt;  &lt;p&gt;AppFabric Cache might not be your first choice if you are looking for a secure and reliable store provider. As &lt;a href="http://www.biztalkgurus.com/blogs/biztalk/archive/2011/01/10/biztalk-and-appfabric-caching-problem-or-problem-solver.aspx"&gt;Stephen W. Thomas&lt;/a&gt; put it: “&lt;i&gt;Never put anything in the Cache that MUST not be lost – it is a non-transactional cache, not a database&lt;/i&gt;”. &lt;/p&gt;  &lt;p&gt;However, persistence is also about scalability. If you, for example, are using WF to control the page flow of an ASP.Net application &lt;u&gt;running on multiple&lt;/u&gt; web servers, you’d need persistence to make sure one server can continue a workflow which initiated on another server. Furthermore, in any scenarios where workflow services are accessed in a session-less manner, it is also important to persist immediately when the workflows gets idle. Otherwise the second request to the workflow might be re-directed to the other server, while it’s still active in memory on the first server. We can control this behavior using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.activities.description.workflowidlebehavior.timetounload.aspx"&gt;WorkflowIdleBehavior.TimeToUnload&lt;/a&gt; setting in the web-/app.config:&lt;/p&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;sqlWorkflowInstanceStore&lt;/span&gt; &lt;span class="attr"&gt;connectionStringName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;persistenceStore&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceMetadata&lt;/span&gt; &lt;span class="attr"&gt;httpGetEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;b&gt;&lt;font&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;workflowIdle&lt;/span&gt; &lt;span class="attr"&gt;timeToUnload&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;00:00:00&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceDebug&lt;/span&gt; &lt;span class="attr"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The default value for the property is 1 minute. Unloading a workflow implies that it is also persisted. If TimeToUnload is set to zero the workflow instance is persisted and unloaded immediately after the workflow becomes idle. Setting TimeToUnload to MaxValue() effectively disables the unload operation. Idle workflow instances are never unloaded.&lt;/p&gt;

&lt;p&gt;In some cases, for example when using WF to control the UI of your application, , you may consider using a less reliable provider. In such cases storing your workflow state in AppFabric Cache could be a good fit. In fact I would not be surprised if Microsoft shipped an AppFabric Cache provider in a near future.&lt;/p&gt;

&lt;p&gt;But I won’t lie to you, – I think AppFabric Cache is super cool, and would make up any excuse to play with it!&lt;/p&gt;

&lt;h3&gt;What is correlation?&lt;/h3&gt;

&lt;p&gt;First lets have a look at the sample workflow. It’s a very simple sample to simulate a process of working with some sort of document form. The user may save the document, to come back later to continue working on its content.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_401106F4.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_114B4E52.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="480" width="546" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The client calls the workflow service through the &lt;i&gt;CreateDocument&lt;/i&gt; method. This will cause the runtime to create a new instance of the workflow. &lt;/li&gt;

  &lt;li&gt;After receiving the new Document, the workflow assigns it to a local variable. &lt;/li&gt;

  &lt;li&gt;As the response is sent back to the client, the workflow initializes the correlation on the Document.Id (string) &lt;/li&gt;

  &lt;li&gt;While the workflow waits for the client to send an updated document it will become idle, and therefore &lt;b&gt;persisted to the AppFabric Cache store&lt;/b&gt;. &lt;/li&gt;

  &lt;li&gt;The client invokes the &lt;i&gt;UpdateDocument&lt;/i&gt; method. As the workflow instance is not in memory, the runtime will ask the persistence provider for the serialized workflow and will then rehydrate it. &lt;/li&gt;

  &lt;li&gt;The workflow instance will perform the following actions:&lt;/li&gt;

  &lt;ul&gt;
    &lt;ul&gt;
      &lt;li&gt;update the local document variable;&lt;/li&gt;

      &lt;li&gt;return the response;&lt;/li&gt;

      &lt;li&gt;persist its internal state, &lt;/li&gt;

      &lt;li&gt;continue to listen for updates until the user submits “I’m done”.&amp;nbsp; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
&lt;/ol&gt;

&lt;p&gt;The only “complex” part of this workflow is making the second call (and all subsequent calls) to be “routed” to the right workflow instance. Keep in mind that there might be any number of concurrent documents being processed in the system. This is solved using the WF Correlation and in particular Content-Based Correlation.&lt;/p&gt;

&lt;p&gt;If you’re a BizTalk guy, this is nothing new; however when I teach BizTalk classes people seems to have a bit of trouble to understand the concept. A correlation set is basically a “primary key” for the instance of the workflow. The id is created on the first call to the workflow, and needs to be passed on to the runtime for all subsequent calls. Using WF, this is very simple, all you need to do is to set the CorrelationInitializers for instance a SendActivity:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_659A8455.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_3D87D536.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="327" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will cause the Workflow runtime to create the instanceId (Guid), and add it to the binding context of the client. This way the instanceId is passed along with the soap header.&amp;nbsp; Although this might work fine in most situations, there are some limitations. -If the client does not have the instanceId, as when different clients are interacting with the same workflow, this won’t work. You are therefore better off using the &lt;i&gt;Content based correlation &lt;/i&gt;type; &lt;i&gt;Query correlation initalizer&lt;/i&gt;. For more information about the different kinds of correlation that WF provides, have a look at &lt;a href="http://blogs.msdn.com/b/paolos/archive/2011/01/20/how-to-use-duplex-mep-to-communicate-with-biztalk-from-a-net-application-or-a-wf-workflow-running-inside-appfabric-part-2.aspx"&gt;Paolos post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_2AD2DB7F.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_15752617.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="298" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This correlation type lets you define the id of your workflow, based on the content of the message. But keep in mind it needs to be unique.&lt;/p&gt;

&lt;h3&gt;So how does a persistence provider work?&lt;/h3&gt;

&lt;p&gt;The simple answer is: It serializes the workflow along with its metadata to a store. The persistence provider could use any durable media such as a file, database or queue. The AppFabric Cache does not fall in the category of being a durable media, but we will ignore &lt;a href="http://www.biztalkgurus.com/blogs/biztalk/"&gt;Stephens&lt;/a&gt; lame warnings for now, and just concentrate on the sweet coolness of AppFabric Cache. &lt;/p&gt;

&lt;p&gt;To begin with, a persistence provider needs to inherit from &lt;i&gt;&lt;b&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.durableinstancing.instancestore.aspx"&gt;InstanceStore (System.Runtime.DurableInstancing)&lt;/a&gt;&lt;/b&gt;&lt;/i&gt;&lt;b&gt;,&lt;/b&gt; which is an abstract class with some operations you need to overload. The most important one is the &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.durableinstancing.instancestore.begintrycommand.aspx"&gt;BeginTryCommand&lt;/a&gt;. This is a universal operation which will be called from the runtime. With it comes an &lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.durableinstancing.instancepersistencecommand.aspx"&gt;InstancePersistenceCommand&lt;/a&gt; parameter which tells you what the runtime expects you to do. This can be any of the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.durableinstancing.createworkflowownercommand.aspx"&gt;CreateWorkflowOwnerCommand&lt;/a&gt; – &lt;i&gt;Registers the host as the owner of the workflow instance&lt;/i&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.durableinstancing.loadworkflowcommand.aspx"&gt;LoadWorkflowCommand&lt;/a&gt; – Creates a new instance of the workflow, and returns it to the runtime. &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.durableinstancing.loadworkflowbyinstancekeycommand.aspx"&gt;LoadWorkflowByInstanceKeyCommand&lt;/a&gt; – Loads the instance of the workflow &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.durableinstancing.saveworkflowcommand.aspx"&gt;SaveWorkflowCommand&lt;/a&gt; – Saves the instance together with correlation keys. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(there are &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.durableinstancing.aspx"&gt;more commands&lt;/a&gt;, but this will do for now…)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_357B245E.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_7B8BE171.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="480" width="639" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the last SaveWorkflowCommand has the &lt;i&gt;CompleteInstance&lt;/i&gt; set to true, this indicates the workflow is done. In my case, this is where I clean up the cache, even though the cache will eventually clean itself up, as I add to the cache using the timeout parameter. You can set this yourself in the web.config.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;...&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;bLogicalPersistenceStore&lt;/span&gt; &lt;span class="attr"&gt;cacheName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;bLogical&amp;quot;&lt;/span&gt; &lt;font&gt;&lt;span class="attr"&gt;timeout&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;00:05:00&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span class="kwrd"&gt;&lt;font&gt;/&lt;/font&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceMetadata&lt;/span&gt; &lt;span class="attr"&gt;httpGetEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;workflowIdle&lt;/span&gt; &lt;span class="attr"&gt;timeToUnload&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;00:00:01&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;serviceDebug&lt;/span&gt; &lt;span class="attr"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behavior&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;serviceBehaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;behaviors&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/system.activities.durableinstancing.loadworkflowbyinstancekeycommand.aspx"&gt;LoadWorkflowByInstanceKeyCommand&lt;/a&gt; is where I got stuck. As I said in the beginning, –it worked, I just couldn’t figure out why. Below is the code in my LoadWorkflowByInstanceKey method:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; IAsyncResult LoadWorkflowByInstanceKey(InstancePersistenceContext context, &lt;br /&gt;    LoadWorkflowByInstanceKeyCommand command, &lt;br /&gt;    TimeSpan timeout, &lt;br /&gt;    AsyncCallback callback, &lt;br /&gt;    &lt;span class="kwrd"&gt;object&lt;/span&gt; state)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    Key key = _cacheHelper.GetKey(command.&lt;font&gt;LookupInstanceKey&lt;/font&gt;);&lt;br /&gt;    Instance instance = _cacheHelper.GetInstance(key.Instance);&lt;/pre&gt;

&lt;p&gt;I’m loading the workflow using the LookupInstanceKey value, &lt;u&gt;which is a Guid&lt;/u&gt;. Where did that come from? I was expecting my correlation key, – the Document.Id. I was starting to believe the correlation key was stored (together with the LookupInstanceKey) somewhere else. I started to trace the message to see if there was anything hidden in the header, but there wasn’t. I tested different client, collaborating on the same workflow instance, and that worked too. I even set up an environment with multiple servers –AND IT STILL WORKED! How was this possible?&lt;/p&gt;

&lt;p&gt;As I was losing sleep over this, I turned my faith to Paolo Salvatori, hoping he could share some light on this. Eventually, Manu Srivastava and Ruppert Koch explained how the magic works. It turns out the LookupInstanceKey is a 128-bit hash of the actual content based key.&lt;/p&gt;

&lt;p&gt;Manu Srivastava:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;“The Hash == InstanceKey.Value == CorrelationKey == LookupKey. These terms all mean the same thing. &lt;/i&gt;&lt;i&gt;InstanceKey.Value contains the value of the hash, which is of type GUID and represents the correlation / lookup key [&lt;a href="http://msdn.microsoft.com/en-us/library/system.runtime.durableinstancing.instancekey.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.runtime.durableinstancing.instancekey.aspx&lt;/a&gt;]”&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;“It is the responsibility of the Provider to store the Workflow Instance, the Correlation Keys *and* the mapping between the two. The LoadWorkflowByInstanceKeyCommand has a LookupKey as an argument. This is the correlation key. This is the key the custom provider implementation must use to identify and then return the Workflow Instance. The hashing algorithm used is irrelevant to the implementation of the Provider. The Provider only has to worry about storing the InstanceKey.Value and retrieving an instance via the InstanceKey.Value. The transformation between Document.Id and the InstanceKey is a WF runtime detail that you do not need to worry about for your implementation; thus, you do not need to worry about the hashing algorithm itself. When you persist an instance, save the InstanceKey.Value and its mapping to InstanceId. When you load an instance, use the LookupKey to find the correct InstanceId and return the WorkflowInstance. That&amp;#39;s it. You don&amp;#39;t need to go from Document.ID to hash or vice-versa...thats handled at the WF Runtime Layer. Just focus on saving InstanceKey.Values and loading by LookupKey. =) InstanceKey.Value == LookupKey in this particular scenario”&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;In other words: – Concentrate on the problem, and leave the plumbing to us! –Point taken.&lt;/p&gt;

&lt;h3&gt;Running the sample&lt;/h3&gt;

&lt;h6&gt;&lt;font size="2"&gt;Download and install&lt;/font&gt;:&lt;/h6&gt;

&lt;p&gt;Before running the sample, you need to properly configure the environment and in particular you have to create the cache used by the custom Persistence Provider.&lt;/p&gt;

&lt;p&gt;To accomplish this task, you can perform the following steps:&lt;/p&gt;

&lt;p&gt;1. &lt;a href="http://msdn.microsoft.com/en-us/windowsserver/ee695849.aspx"&gt;Download the Windows Server AppFabric&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;2. Read &lt;a href="http://www.hanselman.com/blog/InstallingConfiguringAndUsingWindowsServerAppFabricAndTheVelocityMemoryCacheIn10Minutes.aspx"&gt;Scott Hanselman’s post&lt;/a&gt; as to how to set it up.&lt;/p&gt;

&lt;p&gt;3. Open &lt;i&gt;Caching Administration Windows PowerShell&lt;/i&gt; through the Start menu, and run the following commands:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Start-CacheCluster &lt;/li&gt;

  &lt;li&gt;New-Cache bLogical &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/image_6CF64402.png"&gt;&lt;img src="http://blogical.se/blogs/mikael/image_thumb_1A7763C6.png" style="background-image:none;border-width:0px;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;" title="image" alt="image" border="0" height="416" width="644" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4. &lt;a href="http://blogical.se/files/folders/downloads/entry21761.aspx"&gt;Download&lt;/a&gt; and run the sample the sample.&lt;/p&gt;

&lt;p&gt;This is probably a good time to point out, that the sample provided with this post is not production ready. However, If you want to take it further, I’d be happy to help out!(&amp;lt;/disclaimer&amp;gt;)&lt;/p&gt;

&lt;p&gt;Again, many thanks to &lt;a href="http://blogs.msdn.com/b/paolos/"&gt;Paolo Salvatori&lt;/a&gt;, Manu Srivastava and Ruppert Koch from the AppFabric CAT and Product group. &lt;/p&gt;

&lt;p&gt;HTH&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=21763" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/637qdVXj4rM" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/WF/default.aspx">WF</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Samples/default.aspx">Samples</category><category domain="http://blogical.se/blogs/mikael/archive/tags/AppFabric/default.aspx">AppFabric</category><category domain="http://blogical.se/blogs/mikael/archive/tags/AppFabic+Cache/default.aspx">AppFabic Cache</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Workflow/default.aspx">Workflow</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2011/02/01/using-appfabric-cache-as-wf-persistence-store.aspx</feedburner:origLink></item><item><title>My 15 favorite blog posts of 2010</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/XF5CinRJr6c/top-15-blog-posts-2010-11-15.aspx</link><pubDate>Wed, 22 Dec 2010 19:41:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:20473</guid><dc:creator>wmmihaa</dc:creator><slash:comments>7</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2010/12/22/top-15-blog-posts-2010-11-15.aspx#comments</comments><description>&lt;p&gt;I’ve taken the time to reflect over the blogs I follow, and though about the impact it made to my work over the last year. I’ve also credited post for being just interesting or cool, and perhaps useful in the future. &lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;i&gt;I’ve done this post as a tribute to those who took there valuable time to share their thoughts and experience with the rest of us.&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;How to exploit the Text In Row table option to boost BizTalk Server Performance&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://blogs.msdn.com/b/paolos"&gt;Paolo Salvatori&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As I’ve spent much of the last year focusing BizTalk performance, I found these settings to make a huge difference. Applying the “&lt;i&gt;text in row&lt;/i&gt;” table option on all tables storing the actual message, improved not only the message throughput but also greatly reduced the CPU utilization.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/paolos/archive/2010/03/16/how-to-exploit-the-text-in-row-table-option-to-boost-biztalk-server-performance.aspx"&gt;http://blogs.msdn.com/b/paolos/archive/2010/03/16/how-to-exploit-the-text-in-row-table-option-to-boost-biztalk-server-performance.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Creating a bootable VHD the easy way&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://www.hugohaggmark.com/"&gt;Hugo Häggmark&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Creating a bootable virtual hard drive is not as easy as it’s made to believe! I struggled quite a bit, and as I was complaining about it in the office one day, Hugo said: “I’ve written a blog post about it…”. These posts are great, and it really is the EASY way!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hugohaggmark.com/2010/09/23/creating-a-bootable-vhd-the-easy-way/"&gt;http://www.hugohaggmark.com/2010/09/23/creating-a-bootable-vhd-the-easy-way/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.hugohaggmark.com/2010/11/15/creating-a-bootable-vhd-the-easy-waycontinued/"&gt;http://www.hugohaggmark.com/2010/11/15/creating-a-bootable-vhd-the-easy-waycontinued/&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;How To Boost Message Transformations Using the XslCompiledTransform - Series&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://blogs.msdn.com/b/paolos"&gt;Paolo Salvatori&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Paolo Salvatori’s blog should be on every BizTalkers feed subscription. I’m amazed by the details and the effort of his research. In this post he shows how to use the XslCompiledTransform class instead of using the traditional XlsTransform which is used by the Transformation shape in orchestrations. I found there to be an issue of memory consumption that needs to be sorted out. Never the less, it’s a very interesting concept, and a great series of posts. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/paolos/archive/2010/01/29/how-to-boost-message-transformations-using-the-xslcompiledtransform-class.aspx"&gt;http://blogs.msdn.com/b/paolos/archive/2010/01/29/how-to-boost-message-transformations-using-the-xslcompiledtransform-class.aspx&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/paolos/archive/2010/04/08/how-to-boost-message-transformations-using-the-xslcompiledtransform-class-extended.aspx"&gt;http://blogs.msdn.com/b/paolos/archive/2010/04/08/how-to-boost-message-transformations-using-the-xslcompiledtransform-class-extended.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;WCF-SQL Adapter Table Operations&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://soa-thoughts.blogspot.com/"&gt;Steef-Jan Wiggers&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As I was working with the WCF-SQL adapter a couple of months ago, I was really happy to find Steef-Jans post on the subject. The post shows how to use all the table operations using the “new” sql adapter. Thanks Steef-Jan, and again –Congrats on the MVP award.    &lt;br /&gt;&lt;a href="http://soa-thoughts.blogspot.com/2010/08/wcf-sql-adapter-table-operations.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+blogspot%2FLrBC+%28SOA+Thoughts%2C+EAI+Challenges%29"&gt;http://soa-thoughts.blogspot.com/2010/08/wcf-sql-adapter-table-operations.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+blogspot%2FLrBC+%28SOA+Thoughts%2C+EAI+Challenges%29&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Four Questions - Series&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://seroter.worldpress.com/"&gt;Richard Seroter&lt;/a&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Every time my feed reader notifies me of a new “Four Question” post, I instantly have to read it. It’s always interesting to hear what other people within the community and Microsoft are up to, and Richards questions are always relevant to what is currently happening in the field. And of course it always ends up with the last question, where Richards humor and sarcasm comes to good use.&lt;/p&gt;  &lt;p&gt;I was especially intrigued by the last post where he interviews one of the true heroes of the BizTalk community – &lt;a href="http://seroter.wordpress.com/2010/12/02/interview-series-four-questions-with-ben-cline/"&gt;Ben Cline&lt;/a&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wordpress.com/tag/four-questions/"&gt;http://en.wordpress.com/tag/four-questions/&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Mapping in BizTalk 2010: My favorite new features - Series&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://biztalkmessages.vansplunteren.net/"&gt;Randal van Splunteren&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Randal, also a newly decorated MVP was kind enough to share the features of the new mapper that shipped with BizTalk 2010. If you’re a BizTalk dev, I really recommend you to read these posts as you’re likely to find out some features you didn’t already know about.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-overview/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-overview/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-2-functoid-intellisense/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-2-functoid-intellisense/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-1-intelligent-linking/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-1-intelligent-linking/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-3-relevance-view/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-3-relevance-view/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-4-suggestive-matching/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-4-suggestive-matching/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-4-suggestive-matching/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-4-suggestive-matching/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-5-optimized-display-of-links/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-5-optimized-display-of-links/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-6-highlighting-selected-objects/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-6-highlighting-selected-objects/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-7-bringing-selected-objects-in-view/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-7-bringing-selected-objects-in-view/&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-8-%E2%80%93-search%C2%A0support/"&gt;http://biztalkmessages.vansplunteren.net/2010/05/07/mapping-in-biztalk-2010-my-favorite-new-features-part-8-%E2%80%93-search%C2%A0support/&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;BizTalk 2010: Musing of the ‘new’ SharePoint 2010 WS Adapter&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://blogs.breezetraining.com/"&gt;Mick Badran&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As I was putting together a SharePoint / BizTalk lab using the new SharePoint adapter, I was happy to have found this great great post. Saved my lots of time, –Thanks Mick!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.breezetraining.com.au/mickb/2010/10/12/BizTalk2010MusingOfTheNewSharePoint2010WSAdapter.aspx" title="http://blogs.breezetraining.com.au/mickb/2010/10/12/BizTalk2010MusingOfTheNewSharePoint2010WSAdapter.aspx"&gt;http://blogs.breezetraining.com.au/mickb/2010/10/12/BizTalk2010MusingOfTheNewSharePoint2010WSAdapter.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;ShareTalk Integration (SharePoint/BizTalk) series&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://kentweare.blogspot.com/"&gt;Kent Ware&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Yet another series of really good posts if you plan to integrate with SharePoint. Despite being &lt;a href="http://blogical.se/blogs/mikael/archive/2010/03/01/so-i-lost-a-bet.aspx"&gt;a compulsive gambler from Canada&lt;/a&gt;, Kent is a great guy who shares a lot of BizTalk experience through his blog. Rumors has it he is also writing on a book…And besides his interest in BizTalk he also shares his thoughts on Windows Phone 7 through his new &lt;a href="http://wearsyinc.wordpress.com/"&gt;WP7 blog&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2009/10/sharetalk-integration-sharepointbiztalk.html"&gt;http://kentweare.blogspot.com/2009/10/sharetalk-integration-sharepointbiztalk.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2009/10/sharetalk-integration-sharepointbiztalk_11.html"&gt;http://kentweare.blogspot.com/2009/10/sharetalk-integration-sharepointbiztalk_11.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2010/05/sharetalk-integration-wss-adapter-web.html"&gt;http://kentweare.blogspot.com/2010/05/sharetalk-integration-wss-adapter-web.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2009/10/sharetalk-integration-sharepointbiztalk_4024.html"&gt;http://kentweare.blogspot.com/2009/10/sharetalk-integration-sharepointbiztalk_4024.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2009/10/sharetalk-integration-sharepointbiztalk_27.html"&gt;http://kentweare.blogspot.com/2009/10/sharetalk-integration-sharepointbiztalk_27.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2010/01/sharetalk-integration-sharepointbiztalk.html"&gt;http://kentweare.blogspot.com/2010/01/sharetalk-integration-sharepointbiztalk.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2010/01/sharetalk-integration-sharepointbiztalk_16.html"&gt;http://kentweare.blogspot.com/2010/01/sharetalk-integration-sharepointbiztalk_16.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2010/05/sharetalk-integration-wss-adapter-web.html"&gt;http://kentweare.blogspot.com/2010/05/sharetalk-integration-wss-adapter-web.html&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;BizTalk Adapter Pack 2.0/SAP Adapter series&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://kentweare.blogspot.com/"&gt;Kent Ware&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m not currently working with SAP even though know I’ll probably be in the future. By then I’m sure I’ll thank Kent again for taking the time to write these posts.&amp;nbsp; &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://kentweare.blogspot.com/2010/01/biztalk-adapter-pack-20-sap-adapter.html"&gt;http://kentweare.blogspot.com/2010/01/biztalk-adapter-pack-20-sap-adapter.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2010/03/biztalk-adapter-pack-20-sap-adapter.html"&gt;http://kentweare.blogspot.com/2010/03/biztalk-adapter-pack-20-sap-adapter.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2010/04/biztalk-adapter-pack-20-sap-adapter.html"&gt;http://kentweare.blogspot.com/2010/04/biztalk-adapter-pack-20-sap-adapter.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://kentweare.blogspot.com/2010/04/biztalk-adapter-pack-20-part-4-sending.html"&gt;http://kentweare.blogspot.com/2010/04/biztalk-adapter-pack-20-part-4-sending.html&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Benchmark your BizTalk Server (Part 3)&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://blogs.msdn.com/b/ewanf/"&gt;Ewan Fairweather&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you’re a true hard-core BizTalker and think performance is important, then this is a “must read” article. Take your time and read it a couple of times as it’s very detailed. Ewan have also been kind enough to share his script files for helping you identifying bottlenecks.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/ewanf/archive/2010/01/12/benchmark-your-biztalk-server-part-3.aspx"&gt;http://blogs.msdn.com/b/ewanf/archive/2010/01/12/benchmark-your-biztalk-server-part-3.aspx&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Large Message Transfer with WCF-Adapters – Series&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://blogs.msdn.com/b/paolos"&gt;Paolo Salvatori&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I find it funny that Paolo sometimes makes an effort to split a topic into two parts. Every one of those posts could easily be split into five parts, and together make up for small book. Paolo does not write posts – he writes essays!&amp;nbsp; &lt;/p&gt;  &lt;p&gt;Transferring large messages is a common challenge using BizTalk. This post cover the subject in detail, and shows how to effectively minimize the use of recourses, while still transferring large files through BizTalk. The content of these posts was also demonstrated by &lt;a href="http://blogs.msdn.com/b/ewanf/"&gt;Ewan Fairweather&lt;/a&gt; during his &lt;a href="http://msdn.microsoft.com/sv-se/biztalk/ff727968%28en-us%29.aspx"&gt;talk at the Swedish BizTalk User Group&lt;/a&gt;.&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/paolos/archive/2010/05/25/large-message-transfer-with-wcf-adapters-part-1.aspx"&gt;http://blogs.msdn.com/b/paolos/archive/2010/05/25/large-message-transfer-with-wcf-adapters-part-1.aspx&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/paolos/archive/2010/09/09/large-message-transfer-with-wcf-adapters-part-2.aspx"&gt;http://blogs.msdn.com/b/paolos/archive/2010/09/09/large-message-transfer-with-wcf-adapters-part-2.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;XmlDisassemble in a passthrough pipeline?&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://blogical.se/blogs/johan"&gt;Johan Hedberg&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The discovery of BizTalk adding an Xml disassemble stage to a passthrough pipeline, was an interesting fact to say the least. Frightening might be a better choice of words.&amp;nbsp; Johan explain under which circumstances this happens. “Funny” enough, I’ve come across this issue twice this year.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/johan/archive/2010/09/11/xmldisassemble-in-a-passthrough-pipeline.aspx"&gt;http://blogical.se/blogs/johan/archive/2010/09/11/xmldisassemble-in-a-passthrough-pipeline.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Modernizing BizTalk Server BAM with PowerPivot&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://weblogs.asp.net/gsusx/"&gt;Jesus Rodriguez&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I couldn’t agree more, – BAM is one of my favorite features of BizTalk. With the release of SQL Server 2008 R2 came PowerPivot for SharePoint and Excel, and even though I haven’t got around to test PowerPivot&amp;nbsp; yet,I really find this interesting, and I’m sure I’ll get back to the post later on.&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;a href="http://weblogs.asp.net/gsusx/archive/2010/09/28/modernizing-biztalk-server-bam-with-powerpivot.aspx"&gt;http://weblogs.asp.net/gsusx/archive/2010/09/28/modernizing-biztalk-server-bam-with-powerpivot.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Less Virtual, More Machine - Windows 7 and the magic of Boot to VHD&lt;/h3&gt;  &lt;p&gt;by &lt;a href="http://www.hanselman.com"&gt;Scott Hanselman&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;With Windows 7 came the “boot to VHD” feature. I generally don’t want to install anything but the Office suite on my laptop. This is because I tend to try out a lot of CTP releases, along with the fact that I work with different customers where it’s a good practice to separate the environments. I solve that by always working in virtual environments. Using Windows Virtual PC is only supported in 32 bits, and even if I’d use VMWare or Virtual Box, I would not fully utilize the capacity of my laptop. &lt;/p&gt;  &lt;p&gt;I’ve come across many high level demos showing the “boot to VHD” feature in action. But it’s not as easy as it seams. Every time I need to add a VM to my boot menu, I return to this post.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx" title="http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx"&gt;http://www.hanselman.com/blog/LessVirtualMoreMachineWindows7AndTheMagicOfBootToVHD.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Nesting Scope shapes more than 19 levels&lt;/h3&gt;  &lt;p&gt;By &lt;a href="http://blog.eliasen.dk"&gt;Jan Eliasen&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The knowledge of this limitation is not likely to come to any good use (for anyone (I hope)). But the effort of finding this flaw can not go unnoticed! – Thank you Jan.&amp;nbsp; &lt;br /&gt;&lt;a href="http://blog.eliasen.dk/2010/04/24/NestingScopeShapesMoreThan19Levels.aspx"&gt;http://blog.eliasen.dk/2010/04/24/NestingScopeShapesMoreThan19Levels.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=20473" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/XF5CinRJr6c" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Blogging/default.aspx">Blogging</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogical.se/blogs/mikael/archive/tags/AppFabric/default.aspx">AppFabric</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Blog/default.aspx">Blog</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2010/12/22/top-15-blog-posts-2010-11-15.aspx</feedburner:origLink></item><item><title>10.000 SEK for a developer!</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/EWBPXdddmgI/10-000-sek-for-a-developer.aspx</link><pubDate>Thu, 09 Dec 2010 21:05:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:18438</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2010/12/09/10-000-sek-for-a-developer.aspx#comments</comments><description>&lt;p&gt;&lt;font size="4"&gt;&lt;font size="3"&gt;&lt;font size="2"&gt;We are in desperate need of developers! If you point me to anyone (yourself included),&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;u&gt;I’ll split the finder’s fee of &lt;strong&gt;20.000 SEK with you&lt;/strong&gt;&lt;/u&gt;, if we hire that person. &lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;Who are “we”?&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.zystems.se/"&gt;&lt;font size="2"&gt;Enfo Zystems&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; is a company with a long standing commitment to integration and service orientation. In fact – It’s all we do! We are currently expanding on the Microsoft platform with focus on BizTalk, AppFabric and the cloud offerings from Microsoft. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;The commitment and focus of this company, lead &lt;/font&gt;&lt;a href="http://blogical.se/blogs/johan"&gt;&lt;font size="2"&gt;Johan Hedberg&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; and myself to join Zystems. We were, and still are, amazed by the dedication by everyone we’ve met. Everyone from dev’s to sales, knows and understand integration and service orientation. We’ve even had discussions about BAM with our CEO!&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;What do we offer? &lt;/h3&gt;
&lt;p&gt;&lt;font size="2"&gt;Right now we are looking to set up a delivery center, from which we’ll work as a unit, delivering solutions to projects, opposed to selling consultants per hour. This means you’ll be working on-site from our office in Kista, together with your colleagues, delivering solutions to many customers.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Don’t know BizTalk? –Not a problem, we’ll provide you with necessary education and training. We require you to either have a couple of years experience from .Net, or from working with other&amp;nbsp;integration- or ESB platforms. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;a href="http://blogical.se/blogs/mikael/contact.aspx"&gt;Let me know if you find anyone...&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=18438" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/EWBPXdddmgI" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogical.se/blogs/mikael/archive/tags/AppFabric/default.aspx">AppFabric</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2010/12/09/10-000-sek-for-a-developer.aspx</feedburner:origLink></item><item><title>Webcast: Management Tasks Made Simpler in BizTalk Server 2010 – on Channel9</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/NsJgeFfsrfs/webcast-management-tasks-made-simpler-in-biztalk-server-2010-on-channel9.aspx</link><pubDate>Fri, 15 Oct 2010 11:39:24 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:14012</guid><dc:creator>wmmihaa</dc:creator><slash:comments>0</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2010/10/15/webcast-management-tasks-made-simpler-in-biztalk-server-2010-on-channel9.aspx#comments</comments><description>&lt;p&gt;On the 29th of September we had yet another fantastic event at the &lt;a href="http://biztalkusergroup.se/"&gt;Swedish BizTalk User Group&lt;/a&gt;. This time the agenda was the &lt;strong&gt;&lt;a href="http://bugs20100929.eventbrite.com/"&gt;Future directions of Microsoft Application Platform&lt;/a&gt;&lt;/strong&gt;, which we did together with the &lt;a href="http://www.sqlug.se/"&gt;Swedish SQL user Group&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Unfortunately only one session was recorded and that was the “&lt;em&gt;Management Tasks Made Simpler in Microsoft BizTalk Server 2010&lt;/em&gt;” with me and Paolo Salvatori. The good news is that is been published on Channel9:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Management-Tasks-Made-Simpler-in-Microsoft-BizTalk-Server-2010"&gt;http://channel9.msdn.com/Blogs/MSCOMSWE/Management-Tasks-Made-Simpler-in-Microsoft-BizTalk-Server-2010&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/colordrop1_thumb_5A99DF741_thumb_0521EAC81_07281546.gif"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="colordrop1_thumb_5A99DF741_thumb_0521EAC8[1]" border="0" alt="colordrop1_thumb_5A99DF741_thumb_0521EAC8[1]" src="http://blogical.se/blogs/mikael/colordrop1_thumb_5A99DF741_thumb_0521EAC81_thumb_5EA93331.gif" width="240" height="71" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=14012" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/NsJgeFfsrfs" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/User+Group/default.aspx">User Group</category><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk+2010/default.aspx">BizTalk 2010</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2010/10/15/webcast-management-tasks-made-simpler-in-biztalk-server-2010-on-channel9.aspx</feedburner:origLink></item><item><title>Videos from the BizTalk Conference in Stockholm available on Channel9</title><link>http://feedproxy.google.com/~r/wmmihaa/~3/rWPvooBa-nM/videos-from-the-biztalk-conference-in-stockholm-available-on-channel9.aspx</link><pubDate>Fri, 15 Oct 2010 08:52:00 GMT</pubDate><guid isPermaLink="false">19a535f3-07d9-4378-9c5a-8d019d91e842:14001</guid><dc:creator>wmmihaa</dc:creator><slash:comments>3</slash:comments><comments>http://blogical.se/blogs/mikael/archive/2010/10/15/videos-from-the-biztalk-conference-in-stockholm-available-on-channel9.aspx#comments</comments><description>&lt;p&gt;All the videos from European BizTalk Conference in Stockholm has been published on Channel9. Thanks to everyone attending, and of course also Richard, Ewan and Stephen for coming over to Sweden.&lt;/p&gt;
&lt;p&gt;All sessions relates to the &lt;a href="http://appliedarchitecturepatterns.com/"&gt;Applied Architecture Patterns on the Microsoft Platform&lt;/a&gt; book that came out just after the conference. It’s a great book, and I hope you feel compelled to buy it after you’ve seen these presentations :)&lt;/p&gt;
&lt;p&gt;Enjoy…&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogical.se/blogs/mikael/colordrop1_thumb_5A99DF741_6DD6E656.gif"&gt;&lt;img src="http://blogical.se/blogs/mikael/colordrop1_thumb_5A99DF741_thumb_0521EAC8.gif" style="border:0px none;display:inline;" title="colordrop1_thumb_5A99DF74[1]" alt="colordrop1_thumb_5A99DF74[1]" border="0" height="71" width="240" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Day 1 (Sessions from 8th of September)&lt;/h4&gt;
&lt;table style="border:2px solid black;" cellpadding="1" cellspacing="2"&gt;

&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;b&gt;Title&lt;/b&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;b&gt;Speaker&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Intro-BizTalk-Talk-Conference-Stockholm-September-8-9"&gt;Welcome and Introduction&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://seroter.wordpress.com" target="_blank"&gt;Richard Seroter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Choosing-The-Right-Tool-in-the-Application-Platform-BizTalk-Conference-Stockholm"&gt;Choosing The Right Tool in the Application Platform&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Discuss the challenge of choosing the right technology for a given situation and present a decision framework for guiding evaluation.&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://seroter.wordpress.com" target="_blank"&gt;Richard Seroter&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/ewanf/" target="_blank"&gt;Ewan Fairweather&lt;/a&gt; &amp;amp; &lt;a href="http://www.biztalkgurus.com/blogs/biztalk/" target="_blank"&gt;Stephen W. Thomas&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/ech-Overview-SQL-Server-BizTalk-Conference-Stockholm"&gt;Tech Overview: SQL Server&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Look at the core components of SQL Server that are used to build applications (e.g. SSIS) and when to use them.&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://blogs.msdn.com/b/ewanf/" target="_blank"&gt;Ewan Fairweather&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Tech-Overview-BizTalk-Server-BizTalk-Conference"&gt;Tech Overview: BizTalk Server&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Discuss what BizTalk is and when to use it.&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://seroter.wordpress.com" target="_blank"&gt;Richard Seroter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Tech-Overview-WCFWF-Server-AppFabric-BizTalk-Conference-Stockholm"&gt;Tech Overview: WCF/WF, Server AppFabric&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Highlight key capabilities in WCF and WF and benefits offered by Windows Server AppFabric.&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://www.biztalkgurus.com/blogs/biztalk/" target="_blank"&gt;Stephen W. Thomas&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Tech-Overview-Windows-Azure-Platform-BizTalk-Conference-Stockholm"&gt;Tech Overview: Windows Azure Platform&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Discuss Microsoft’s cloud offering and best usage scenarios.&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://seroter.wordpress.com" target="_blank"&gt;Richard Seroter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Pattern-1--Simple-Workflow-BizTalk-Conference-Stockholm"&gt;Pattern #1 – Simple Workflow&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Evaluate scenario that involves aggregating data from multiple sources and presenting a unified response&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://blogs.msdn.com/b/ewanf/" target="_blank"&gt;Ewan Fairweather&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;h4&gt;Day 2 (Sessions from 9th of September)&lt;/h4&gt;
&lt;table style="border:2px solid black;" cellpadding="1" cellspacing="2"&gt;

&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;b&gt;Title&lt;/b&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;b&gt;Speaker&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Pattern-2--Content-Based-Routing-BizTalk-Conference-Stockholm"&gt;Pattern #2 – Content Based Routing&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Consider options for effectively transmitting data to multiple systems that perform similar functions&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://seroter.wordpress.com" target="_blank"&gt;Richard Seroter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Pattern-3--Low-Latency-RequestReply-BizTalk-Conference-Stockholm"&gt;Pattern #3 – Human Workflow with Rapair and Resubmit&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;This video shows using SharePoint 2010 to store customer details.&amp;nbsp; Then using workflow 3.5 send these details to an AppFabric hosted workflow 4.0 Workflow Service.&amp;nbsp; This workflow service controls the payment collection process and allows for updating information on a use into the same workflow from SharePoint.&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://www.biztalkgurus.com/blogs/biztalk/" target="_blank"&gt;Stephen W. Thomas&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Pattern-4--Cross-Organization-Supply-Chain-BizTalk-Conference-Stockholm"&gt;Pattern #4 – Cross Organization Supply Chain&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Evaluate how to build a supply chain to integrate systems in a PO scenario&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://blogs.msdn.com/b/ewanf/" target="_blank"&gt;Ewan Fairweather&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Pattern-5--Remote-Message-Broadcast-BizTalk-Conference-Stockholm"&gt;Pattern #5 – Remote Message Broadcast&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Demonstrates a scenario where traditional polling solution is augmented to support real-time updates&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://www.biztalkgurus.com/blogs/biztalk/" target="_blank"&gt;Stephen W. Thomas&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://channel9.msdn.com/Blogs/MSCOMSWE/Pattern-6--Complex-Event-Processing-BizTalk-Conference-Stockholm"&gt;Pattern #6 – Complex Event Processing&lt;/a&gt;&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;Addresses click stream analysis and creating actionable events from user and system behavior.&lt;/td&gt;
&lt;td style="border:1px solid gray;"&gt;&lt;a href="http://seroter.wordpress.com" target="_blank"&gt;Richard Seroter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;img src="http://blogical.se/aggbug.aspx?PostID=14001" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/wmmihaa/~4/rWPvooBa-nM" height="1" width="1"/&gt;</description><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogical.se/blogs/mikael/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogical.se/blogs/mikael/archive/tags/WebCast/default.aspx">WebCast</category><category domain="http://blogical.se/blogs/mikael/archive/tags/User+Group/default.aspx">User Group</category><category domain="http://blogical.se/blogs/mikael/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogical.se/blogs/mikael/archive/tags/BizTalk+2010/default.aspx">BizTalk 2010</category><category domain="http://blogical.se/blogs/mikael/archive/tags/AppFabric/default.aspx">AppFabric</category><feedburner:origLink>http://blogical.se/blogs/mikael/archive/2010/10/15/videos-from-the-biztalk-conference-in-stockholm-available-on-channel9.aspx</feedburner:origLink></item></channel></rss>

