<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Matricis</title>
	<atom:link href="http://matricis.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://matricis.com</link>
	<description></description>
	<lastBuildDate>Wed, 19 Jun 2013 20:08:34 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Reading Notes 2013-06-17</title>
		<link>http://matricis.com/notes-de-lecture/reading-notes-2013-06-17/</link>
		<comments>http://matricis.com/notes-de-lecture/reading-notes-2013-06-17/#comments</comments>
		<pubDate>Tue, 18 Jun 2013 13:19:19 +0000</pubDate>
		<dc:creator>Matricis</dc:creator>
				<category><![CDATA[Notes de lecture]]></category>
		<category><![CDATA[architechture]]></category>
		<category><![CDATA[aws @fr]]></category>
		<category><![CDATA[azure @fr]]></category>
		<category><![CDATA[claim]]></category>
		<category><![CDATA[cloud @fr]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[mobile @fr]]></category>
		<category><![CDATA[mvc @fr]]></category>
		<category><![CDATA[powershell @fr]]></category>
		<category><![CDATA[readingsnotes]]></category>
		<category><![CDATA[refactoring @fr]]></category>
		<category><![CDATA[services @fr]]></category>
		<category><![CDATA[sync @fr]]></category>
		<category><![CDATA[wif]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=4763</guid>
		<description><![CDATA[Reading Notes 2013-06-17 You will find below different links to the blog or Web site which kept Matricis&#39; bloggers interest during the week ending on June, 16th. Cloud Azure VM Access Control with PowerShell (Tyler Doerksen) &#8211; Great with this post we now know all the new features that came <a href="http://matricis.com/notes-de-lecture/reading-notes-2013-06-17/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<h1>Reading Notes 2013-06-17</h1>
<p style="font-size: 13px;">You will find below different links to the blog or Web site which kept Matricis&#39; bloggers interest during the week ending on June, 16th.</p>
<h2>Cloud</h2>
<ul>
<li><b><a href="http://blog.tylerdoerksen.com/2013/06/05/azure-vm-access-control-with-powershell/?utm_source=feedly">Azure VM Access Control with PowerShell</a></b> (Tyler Doerksen) &#8211; Great with this post we now know all the new features that came up last week: PowerShell command.</li>
<li><b><a href="http://blog.toddysm.com/2013/06/10-dos-and-donts-for-running-proof-of-concept-projects-in-the-cloud.html">10 Dos and Don&#39;ts for Running Proof-of-Concept Projects in the Cloud</a></b> &#8211; Nice post that highlights the pros and cons.</li>
<li><b><a href="http://www.geekchamp.com/news/conflicts-windows-azure-mobile-service-to-sqlite-data-sync-for-windows-phone-and-winrt-with-portable-class-libraries?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+Windowsphonegeek+%28GeekChamp%29">Conflicts: Windows Azure Mobile Service to SQLite Data Sync for Windows Phone and WinRT with Portable Class Libraries</a></b> &#8211; Nice post about possible sync conflicts.</li>
<li><b><a href="http://www.tdan.com/view-articles/16969">BASE Jumping in the Cloud</a></b> (Jason Bloomberg) &#8211; Interesting post that explains why a re-architecture is more than often needed when moving our application in the cloud.</li>
<li><b><a href="http://weblogs.asp.net/scottgu/archive/2013/06/14/windows-azure-major-updates-for-mobile-backend-development.aspx">Windows Azure: Major Updates for Mobile Backend Development</a></b> (Scott Gu) &#8211; Another big release for Windows Azure that boost the Mobile Services offers.</li>
</ul>
<h2>Databases</h2>
<ul>
<li><b><a href="http://aws.amazon.com/about-aws/whats-new/2013/06/10/amazon-rds-lowers-ondemand-and-ri-prices-globally/">Amazon RDS Lowers On-Demand and Reserved Instance Prices Globally</a></b> &#8211; And the battle for the lowest price continues (that&#39;s good for us) this time the databases are targeted.</li>
</ul>
<h2>UX</h2>
<ul>
<li><b><a href="http://www.devcurry.com/2013/05/bundling-and-minification-in-aspnet-mvc.html">Bundling and Minification in ASP.NET MVC</a></b> (Suprotim Agarwal) &#8211; Minification is a important process to have a nice UX. It&#39;s now easier than ever.</li>
<li><b><a href="http://davidwalsh.name/javascript-optimization">JavaScript: Avoiding Repeated Work</a></b> (David Walsh) &ndash; Nice snippets to help us out in&nbsp; Javascript</li>
<li><b><a href="http://www.netmagazine.com/interviews/jeff-gothelf-lean-ux">Jeff Gothelf on Lean UX</a></b> (Martin Cooper) &ndash; Nice interview about Lean UX</li>
<li><b><a href="http://nshipster.com/nshipster-quiz-2/">NSHipster Quiz #2</a></b> (Mattt Thompson) &ndash; Are you able to get 100% ? Really hard !</li>
</ul>
<h2>Programming</h2>
<ul>
<li><b><a href="http://designpepper.com/blog/drips/using-duck-typing-to-avoid-conditionals-in-javascript">Using Duck Typing to Avoid Conditionals in JavaScript</a></b> &#8211; Good explication of Duck Typing method by refractory code step by step.</li>
<li><b><a href="http://www.daedtech.com/introduction-to-unit-testing-dont-worry-your-secret-is-safe-with-me?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=introduction-to-unit-testing-dont-worry-your-secret-is-safe-with-me">Introduction to Unit Testing (Don&rsquo;t Worry, Your Secret is Safe with Me)</a></b> (Erik Dietrich) &#8211; Interesting post about unit testing. What is it, and what it isn&#39;t.</li>
<li><b><a href="http://brijbhushan.net/2011/10/15/claim-based-authentication-and-wif/">Claim based Authentication and WIF : Part 1</a></b>&nbsp;- First of a series, this post describes what is a claim base process and who are the players involve in it.</li>
<li><b><a href="http://www.hanselman.com/blog/StopDoingInternetWrong.aspx">Stop Doing Internet Wrong</a></b> (Scott Hanselman)- Interesting list of some simple things to do to get a better experience online.</li>
<li><b><a href="http://community.sharpdevelop.net/blogs/christophwille/archive/2013/06/10/using-azure-mobile-services-in-sharpdevelop.aspx">Using Azure Mobile Services in SharpDevelop</a></b> &#8211; Nice alternative to Visual Studio. Check out the video here to see it developing with Azure.</li>
</ul>
<h2>Miscellaneous</h2>
<ul>
<li><b><a href="http://blogs.msdn.com/b/microsoftukstudents/archive/2013/06/10/marketing-101-for-developers.aspx">Marketing 101 for developers</a></b> (Phil Cross, saraallison Natasha Joseph) &#8211; Why a developer should care about marketing? Because we need it? This post answers the question.</li>
<li><b><a href="http://www.hanselman.com/blog/TheImportanceOfClosedCaptioningHowToAndWhySubtitle.aspx">The Importance of Closed Captioning &#8211; How To and Why Subtitle</a></b> (Scott Hanselman) &#8211; Really interesting post. Doing subtile look like a lot of effort, but it&#39;s worth it. This post contains sample, tutorial and tools references.</li>
<li><b><a href="http://genuinecuriosity.com/genuinecuriosity/2013/6/10/8-practical-tips-for-avoiding-pickpockets">8+ Practical Tips for Avoiding Pickpockets</a></b>&nbsp;- Simple tips that can save you a lot of problems when you are traveling.</li>
</ul>
<p>&nbsp;</p>
<p style="font-size: 13px;">These posts are from&nbsp;<a href="http://matricis.com/author/fboucher/">Fran&ccedil;ois Boucher</a>&nbsp;and Sebastien Leclerc,&nbsp;and are also posted on&nbsp;<a href="http://www.frankysnotes.com/2013/06/reading-notes-99.html">http://www.frankysnotes.com/2013/06/reading-notes-99.html</a>.</p>
<p style="font-size: 13px;">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/notes-de-lecture/reading-notes-2013-06-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reading Notes 2013-06-10</title>
		<link>http://matricis.com/notes-de-lecture/reading-notes-2013-06-10-2/</link>
		<comments>http://matricis.com/notes-de-lecture/reading-notes-2013-06-10-2/#comments</comments>
		<pubDate>Mon, 10 Jun 2013 18:25:31 +0000</pubDate>
		<dc:creator>Matricis</dc:creator>
				<category><![CDATA[Notes de lecture]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=4744</guid>
		<description><![CDATA[Reading Notes 2013-06-10 You will find below different links to the blog or Web site which kept Matricis&#39; bloggers interest during the week ending on June, 9th. Cloud How To: Setup Windows Azure PowerShell&#160; &#8211; Quick post that explains how to get ready to play with Azure with PowerShell. Cloud <a href="http://matricis.com/notes-de-lecture/reading-notes-2013-06-10-2/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<h1>Reading Notes 2013-06-10</h1>
<p style="font-size: 13px;">You will find below different links to the blog or Web site which kept Matricis&#39; bloggers interest during the week ending on June, 9th.</p>
<h2>Cloud</h2>
<ul>
<li><strong><a href="http://adminian.com/2013/04/16/how-to-setup-windows-azure-powershell/">How To: Setup Windows Azure PowerShell</a>&nbsp;</strong> &#8211; Quick post that explains how to get ready to play with Azure with PowerShell.</li>
<li><b><a href="http://channel9.msdn.com/Shows/Cloud+Cover/Episode-109-Using-Windows-Azure-Active-Directory-from-Windows-Store-apps">Cloud Cover Show, Episode 109 &#8211; Using Windows Azure Active Directory from Windows Store apps</a></b> &#8211; Nice episode with V. Bertocci that get us up to date on all the news Windows Azure Active Directory (AD) features.</li>
<li><b><a href="http://blog.pantos.name/archive/2013/05/18/running-wordpress-with-sql-azure.aspx">Running WordPress with SQL Azure</a></b> &#8211; What a great workaround! It could be super if we had this option when creating the application.</li>
<li><b><a href="http://www.zdnet.com/is-amazon-becoming-the-microsoft-of-cloud-hold-that-thought-7000016157/">Is Amazon becoming the Microsoft of cloud? Hold that thought | ZDNet</a></b> (Service Oriented Joe McKendrick) &#8211; Interesting post about the future of the major players who wants to rules the cloud.</li>
<li><b><a href="http://oakleafblog.blogspot.ca/2013/06/microsofts-understanding-microsoft.html">Microsoft&rsquo;s &ldquo;Understanding the Microsoft Cloud&rdquo; White Paper Misses the Windows Azure IaaS Boat</a></b> (Roger Jennings) &#8211; Hard critic of a Microsoft White Paper. However, it&#39;s true that this paper does reflect Azure IaaS reality.</li>
<li><b><a href="http://blog.syntaxc4.net/post/2013/05/25/new-windows-azure-sdk-for-php-feature-runphp-on-windows.aspx?utm_source=feedly&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+SyntaxC4+%28SyntaxC4.Net+Blog%29">Cloudy Thoughts by SyntaxC4</a></b> &#8211; Quick post that introduces some cool new feature for PHP in Azure&#8230;</li>
<li><b><a href="http://michaelwasham.com/2013/06/03/windows-azure-powershell-june-2013-update-for-iaas-and-paas/">Windows Azure PowerShell June 2013 Update for IaaS and PaaS</a></b> (Michael Washam) &#8211; With new Azure capabilities comes great PowerShell functionality&#8230; this post is all about that. Also Michal Washam is announcing that he is quitting Microsoft</li>
<li><b><a href="http://channel9.msdn.com/Shows/Cloud+Cover/Episode-110-Windows-Azure-BizTalk-Services">Cloud Cover Show, Episode 110 &#8211; Windows Azure BizTalk Services</a></b> &#8211; Great show with a demo done by no other than Guru Venkataraman.</li>
<li><b><a href="http://blog.tylerdoerksen.com/2013/05/29/checking-azure-cloud-service-sdk-version-with-powershell/?utm_source=feedly">Checking Azure Cloud Service SDK Version with PowerShell</a></b> (Tyler Doerksen) &#8211; Nice and useful script.</li>
<li><b><a href="http://blog.tylerdoerksen.com/2013/06/05/azure-vm-access-control-with-powershell/?utm_source=feedly">Azure VM Access Control with PowerShell</a></b> (Tyler Doerksen) &#8211; Great with this post we now know all the new features that came up last week: powershell command.</li>
<li><b><a href="http://weblogs.asp.net/scottgu/archive/2013/06/03/windows-azure-announcing-new-dev-test-offering-biztalk-services-ssl-support-with-web-sites-ad-improvements-per-minute-billing.aspx">Windows Azure: Announcing New Dev/Test Offering, BizTalk Services, SSL Support with Web Sites, AD Improvements, Per Minute Billing</a></b> (Scott Guthrie)- This post is a mandatory reading. Know from the source what&#39;s new! So many good things, that I don&#39;t know where to start&#8230;</li>
</ul>
<p>&nbsp;</p>
<h2>Databases</h2>
<ul>
<li><b><a href="http://www.scarydba.com/2013/05/20/azure-does-powershell-too/">Azure does Powershell too</a></b> (Grant Fritchey) &#8211; Nice quick introduction to Azure Sql PowerShell cmdlets.</li>
</ul>
<p>&nbsp;</p>
<h2>UX</h2>
<ul style="font-size: 13px;">
<li><a href="http://designmodo.com/flat-design-principles/"><b>Principles of Flat Design</b></a> (Carrie Cousin) &ndash; Il faut rester simple&hellip;</li>
<li><a href="http://mobile.smashingmagazine.com/2013/05/29/the-state-of-responsive-web-design/"><b>The State Of Responsive Web Design</b></a> (St&eacute;phanie Walter) &ndash; Quoi faire avec les images ?</li>
<li><a href="http://www.journaldunet.com/ebusiness/expert/54343/pourquoi-j-ai-choisi-de-me-passer-de-l-app-store-et-de-l-android-store.shtml"><b>Pourquoi j&#39;ai choisi de me passer de l&#39;App Store et de l&#39;Android Store</b></a> (J&eacute;r&ocirc;me Morlon) &ndash; Des web app qui vont remplacer les app natives ? Je ne crois pas&hellip;</li>
</ul>
<p>&nbsp;</p>
<h2>Integration</h2>
<ul>
<li><b><a href="http://seroter.wordpress.com/2013/06/03/walkthrough-of-new-windows-azure-biztalk-services/">Walkthrough of New Windows Azure BizTalk Services</a></b> &#8211; Again a great post/ tutorial from Seroter. This is THE place to start to know more about the Biztalk services (WABS)</li>
</ul>
<div style="color: rgb(0, 0, 0); font-family: 'Segoe UI', Helvetica, Arial, sans-serif; font-size: medium; line-height: normal; margin: 0px;">&nbsp;</div>
<h2>Programming</h2>
<ul>
<li><b><a href="http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx">ELMAH: Error Logging Modules and Handlers for ASP.NET (and MVC too!)</a></b> (Scott Hanselman) &#8211; This post is not really recent, but really interesting. If you still don&#39;t ELMAH this post is for you.</li>
<li><b><a href="http://jrozenblit.ca/2013/05/making-computer-science-cool/?utm_source=feedly">Making Computer Science Cool</a></b> (Jonathan Rozenblit) &#8211; Really good resources post that gives place to get started based on our level of confort. It could also be use at home for our kids&#8230; I wonder if this kind of information is also available in other languages&#8230;</li>
<li><b><a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/DEV-B203#fbid=BCopWWrMl4o">TypeScript: Scaling Up JavaScript</a></b> &#8211; Great video from TechEd, it was hard to wait until the end to start doing TypeScript&#8230;</li>
</ul>
<p>&nbsp;</p>
<h2>Miscellaneous</h2>
<ul>
<li><b><a href="http://hanselminutes.com/372/are-you-secure-wifi-honeypots-pineapples-and-ssl-with-troy-hunt">Are you secure? WiFi Honeypots, Pineapples and SSL with Troy Hunt</a></b> &#8211; And I though I knew the danger of the WiFi. You must spend 30 minutes and listen this post&#8230; and re-share!</li>
<li><b><a href="http://www.hanselman.com/blog/AnnouncingGetInvolvedFromTekpubEnhanceYourCareerByEngagingWithYourPeers.aspx">Announcing &quot;Get Involved&quot; from Tekpub &#8211; Enhance your career by engaging with your peers</a></b> (Scott Hanselman &amp; Rob Conery) &#8211; Really great video that explains how to be involve in the community, the good way. Really nice work.</li>
<li><a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/ATC-B309#fbid=BCopWWrMl4o"><strong>Live Demonstration: Hacker Tools You Should Know and Worry About</strong></a> (Hasain Alshakarti, Marcus Murray) &#8211; Wow! Very &quot;perturbing&quot; video that shows a lot of different tools to help you&#8230; or not.</li>
</ul>
<p>&nbsp;</p>
<p style="font-size: 13px;">These posts are from&nbsp;<a href="http://matricis.com/author/fboucher/">Fran&ccedil;ois Boucher</a>&nbsp;and Sebastien Leclerc,&nbsp;and are also posted on&nbsp;<a href="http://www.frankysnotes.com/2013/06/reading-notes-98.html">http://www.frankysnotes.com/2013/06/reading-notes-98.html</a>.</p>
<p style="font-size: 13px;">&nbsp;</p>
<p style="font-size: 13px;">&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/notes-de-lecture/reading-notes-2013-06-10-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment faire pour copier des blobs ou VHD entre différents abonnements Windows Azure</title>
		<link>http://matricis.com/billet-technique/windows-azure-copi/</link>
		<comments>http://matricis.com/billet-technique/windows-azure-copi/#comments</comments>
		<pubDate>Fri, 25 Jan 2013 15:16:52 +0000</pubDate>
		<dc:creator>François Boucher</dc:creator>
				<category><![CDATA[Billet technique]]></category>
		<category><![CDATA[azure @fr]]></category>
		<category><![CDATA[blob @fr]]></category>
		<category><![CDATA[cmdlets]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[powershell @fr]]></category>
		<category><![CDATA[storage @fr]]></category>
		<category><![CDATA[vhd @fr]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=3944</guid>
		<description><![CDATA[Comment faire pour copier des blobs ou VHD entre diff&#233;rents abonnements Windows Azure Tout d&#39;abord, pourquoi copier un Virtual Hard Drive (disque dur virtuel) ou un blob d&#39;un abonnement Windows Azure &#224; un autre? Ce pourrait &#234;tre pour faire des sauvegardes, parce que votre p&#233;riode d&#8217;essai de Windows Azure se <a href="http://matricis.com/billet-technique/windows-azure-copi/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<h1>Comment faire pour copier des blobs ou VHD entre diff&eacute;rents abonnements Windows Azure</h1>
<p>Tout d&#39;abord, pourquoi copier un Virtual Hard Drive (disque dur virtuel) ou un blob d&#39;un abonnement Windows Azure &agrave; un autre? Ce pourrait &ecirc;tre pour faire des sauvegardes, parce que votre p&eacute;riode d&rsquo;essai de Windows Azure se termine, ou pour obtenir une copie de serveurs virtuels de clients pour enqu&ecirc;ter sur un probl&egrave;me.<br />
	Donc, quand un client m&#39;a demand&eacute; s&rsquo;il &eacute;tait possible de le faire, ma r&eacute;ponse a &eacute;t&eacute;: &quot;Oui, &agrave; l&#39;aide des outils en ligne de commande pour Azure&quot;. Et puisqu&rsquo;il &eacute;tait &agrave; la recherche d&#39;une solution simple, je lui ai &eacute;crit un petit script que je vais partager ici afin que tous puisse en profiter.<br />
	&nbsp;</p>
<h2>Pour commencer</h2>
<p>Pour faire la copie, il vous suffit de faire une commande PowerShell. Afin de pouvoir ex&eacute;cuter cette commande, vous devez avoir le Windows Azure command-line tool (l&rsquo;outil en ligne de commande de Windows Azure) d&eacute;j&agrave; install&eacute;. &Agrave; la fin de ce billet, je vais donner le script pour son installation.<br />
	&nbsp;</p>
<h2>La commande</h2>
<p>Les pr&eacute;requis &eacute;tant d&eacute;j&agrave; install&eacute;s, vous pouvez ex&eacute;cuter cette ligne de code, &agrave; partir du Windows Azure command-line tool:</p>
<pre class="brush: bash; ruler: true; toolbar: false; auto-links: false; smart-tabs: false;">azure vm disk upload &lt;source-path&gt; &lt;target-blob-url&gt; &lt;target-storage-account-key&gt;</pre>
<p>&nbsp;</p>
<h2>La source</h2>
<p>Dans cette commande, vous devez remplacer &lt;source-path&gt; par l&#39;url du VHD ou du blob que vous souhaitez copier.<br />
	Vous pouvez obtenir cet url via le portail de Windows Azure &agrave; l&#39;aide de votre compte associ&eacute; &agrave; l&rsquo;&eacute;l&eacute;ment que vous souhaitez copier.</p>
<ol>
<li>Sur le c&ocirc;t&eacute; gauche de l&#39;&eacute;cran, cliquez sur l&#39;ic&ocirc;ne de stockage;</li>
<li>Puis cliquez sur le nom du stockage;</li>
<li>En haut de l&#39;&eacute;cran, cliquez sur conteneurs;</li>
<li>Enfin, une fois que la liste des conteneurs appara&icirc;t, cliquez sur le conteneur.</li>
</ol>
<p><a href="http://matricis.com/wp-content/uploads/2013/01/clip_image001.png"><img alt="clip_image001" src="http://matricis.com/wp-content/uploads/2013/01/clip_image001_thumb.png" style="border-width: 0px; margin: 10px; width: 116px; height: 244px; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: left; display: inline; opacity: 0.9; background-image: none;" title="clip_image001" /></a></p>
<p><a href="http://matricis.com/wp-content/uploads/2013/01/clip_image002.png" style="line-height: 1.6em;"><img alt="clip_image002" border="0" height="131" src="http://matricis.com/wp-content/uploads/2013/01/clip_image002_thumb.png" style="border-width: 0px; margin: 10px 70px 10px 10px; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: left; display: inline; opacity: 0.9; background-image: none;" title="clip_image002" width="244" /></a><a href="http://matricis.com/wp-content/uploads/2013/01/clip_image003.png"><img alt="clip_image003" src="http://matricis.com/wp-content/uploads/2013/01/clip_image003_thumb.png" style="border-width: 0px; margin: 0px 70px 0px 0px; width: 244px; height: 92px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image003" /></a><br />
	&nbsp;</p>
<h2>La destination</h2>
<p><a href="http://matricis.com/wp-content/uploads/2013/01/clip_image004.png"><img align="right" alt="clip_image004" border="0" height="168" src="http://matricis.com/wp-content/uploads/2013/01/clip_image004_thumb.png" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: right; display: inline; background-image: none;" title="clip_image004" width="293" /></a>Maintenant que la source a &eacute;t&eacute; identifi&eacute;e, il faut sp&eacute;cifier la destination. Nous devons remplacer le &lt;target-blob-url&gt; par l&#39;url du conteneur dans l&#39;abonnement Windows Azure destination. Si le conteneur existe d&eacute;j&agrave;, il suffit de connecter &agrave; ce compte et de suivre les &eacute;tapes pr&eacute;c&eacute;demment d&eacute;crites. Dans le cas contraire, vous devez cr&eacute;er un nouveau conteneur en utilisant le bouton &quot;+&quot; en bas &agrave; gauche de l&#39;&eacute;cran.</p>
<p>&nbsp;</p>
<p><a href="http://matricis.com/wp-content/uploads/2013/01/clip_image005.png"><img align="right" alt="clip_image005" border="0" height="191" src="http://matricis.com/wp-content/uploads/2013/01/clip_image005_thumb.png" style="border-width: 0px; margin: 10px; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: right; display: inline; background-image: none;" title="clip_image005" width="244" /></a></p>
<p>Le plus simple est de cr&eacute;er le conteneur avec un acc&egrave;s public au moment du transfert. Vous pourrez d&eacute;finir cette option lors de la cr&eacute;ation ou la modifier en utilisant le bouton &laquo; Modifier un conteneur &raquo;, situ&eacute; en bas de l&#39;&eacute;cran.<br />
	S&eacute;lectionnez ensuite Conteneur public, comme propri&eacute;t&eacute; d&rsquo;acc&egrave;s.</p>
<h2>&nbsp;</h2>
<h2>&nbsp;</h2>
<p>&nbsp;</p>
<h2>La cl&eacute;</h2>
<div><img alt="clip_image006" src="http://matricis.com/wp-content/uploads/2013/01/clip_image006_thumb.png" style="margin-right: 10px; margin-left: 10px; float: right;" title="clip_image006" /><span style="line-height: 1.6em;">Finalement, nous devons sp&eacute;cifier la cl&eacute; de compte de stockage et remplacer le &lt;target-storage-account-key&gt; par cette derni&egrave;re. Vous pouvez trouver la cl&eacute; par l&rsquo;entremise du bouton &laquo; G&eacute;rer les cl&eacute;s &raquo; du tableau de bord du stockage. Vous pouvez utiliser la cl&eacute; primaire ou la cl&eacute; d&#39;acc&egrave;s secondaire.Installer Windows Azure command-line tool.</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<div>
<p><a href="http://matricis.com/wp-content/uploads/2013/01/clip_image007.png" style="text-align: right;"><img alt="clip_image007" src="http://matricis.com/wp-content/uploads/2013/01/clip_image007_thumb.png" style="border-width: 0px; border-style: solid; margin-right: 10px; margin-left: 10px; float: right; opacity: 0.9;" title="clip_image007" /></a>Voici un petit script que vous devriez mettre dans un fichier &quot;. cmd&quot; ou &quot;. bat&quot;. Il permet d&rsquo;installer le Windows Azure command-line tool avec Node.js et Chocolatey. Apr&egrave;s avoir ex&eacute;cut&eacute; le script, une console ressemblant &agrave; ceci sera ouverte.</p>
</div>
<div class="separator" style="text-align: center; clear: both;">&nbsp;</div>
<div class="separator" style="text-align: center; clear: both;">
<p>&nbsp;</p>
</div>
<pre class="brush: bash; ruler: true; toolbar: false; auto-links: false; smart-tabs: false;">@powershell -NoProfile -ExecutionPolicy unrestricted -Command &quot;iex ((new-object net.webclient).DownloadString(&#39;http://bit.ly/psChocInstall&#39;))&quot; &amp;&amp; SET PATH=%PATH%;%systemdrive%\chocolatey\bin

@powershell &quot;cinst nodejs.install&quot; &amp;&amp; SET PATH=%PATH%;%ProgramFiles(x86)%\nodejs

@powershell -ExecutionPolicy unrestricted &quot;npm install azure -g&quot; &amp;&amp; SET PATH=%PATH%;%USERPROFILE%\AppData\Roaming\npm\

@powershell azure

pause
</pre>
<p>&nbsp;</p>
<h2>R&eacute;f&eacute;rences</h2>
<ul>
<li><a href="https://www.windowsazure.com/en-us/manage/linux/other-resources/command-line-tools/">Windows Azure command-line tool</a></li>
<li><a href="https://npmjs.org/">Node Packaged Modules</a> or <a href="http://nodejs.org/">Node.js</a></li>
<li><a href="http://chocolatey.org/">Chocolatey</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/billet-technique/windows-azure-copi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trois nouveaux ateliers avancés sur Windows Azure</title>
		<link>http://matricis.com/billet-technique/ateliers-avances-windows-azure/</link>
		<comments>http://matricis.com/billet-technique/ateliers-avances-windows-azure/#comments</comments>
		<pubDate>Mon, 15 Oct 2012 17:26:36 +0000</pubDate>
		<dc:creator>Matricis</dc:creator>
				<category><![CDATA[Billet technique]]></category>
		<category><![CDATA[azure @fr]]></category>
		<category><![CDATA[Formation]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=3440</guid>
		<description><![CDATA[Mordus de Windows Azure? Vous avez fait le camp d&#39;entra&#238;nement (DevCamp) et des ateliers r&#233;guliers, mais vous en voulez plus? Soyez pr&#234;ts, car &#224; partir du 15 octobre, une nouvelle s&#233;rie virtuelle d&#8217;ateliers avanc&#233;s sur Windows Azure commence. Un expert de Matricis sera l&#224; pour r&#233;pondre &#224; toutes vos questions <a href="http://matricis.com/billet-technique/ateliers-avances-windows-azure/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<h2>Mordus de Windows Azure?</h2>
<p>Vous avez fait le camp d&#39;entra&icirc;nement (DevCamp) et des ateliers r&eacute;guliers, mais vous en voulez plus?</p>
<p>Soyez pr&ecirc;ts, car &agrave; partir du 15 octobre, une nouvelle s&eacute;rie virtuelle d&rsquo;ateliers avanc&eacute;s sur Windows Azure commence. Un expert de Matricis sera l&agrave; pour r&eacute;pondre &agrave; toutes vos questions (<u>en fran&ccedil;ais</u> ou en anglais) &nbsp;sur le chat avec les experts de la communaut&eacute; Windows Azure du Canada!</p>
<p><img alt="" src="https://mseventsww.microsoft.com/BannerImages/7467caeb-f006-4e28-9644-9debca1759f4.jpg" style="width: 409px; height: 243px;" /></p>
<h2><strong>15 octobre &ndash; Cloud Variation</strong></h2>
<p>Explorez les options d&#39;infrastructure offertes&nbsp;par Windows Azure, telles&nbsp;services infonuagiques, machines virtuelles et sites web. En comparant ces diff&eacute;rentes options, vous terminerez&nbsp;l&#39;atelier mieux &eacute;quip&eacute; pour choisir celle qui conviendra le mieux &agrave; vos projets.</p>
<p>Enregistrez-vous d&egrave;s aujourd&rsquo;hui: <a href="http://aka.ms/cloudvariations">aka.ms/cloudvariations</a></p>
<h2><strong>22 octobre &#8211; Building Connected Apps with Windows Azure</strong></h2>
<p>D&eacute;couvrez comment les diff&eacute;rents services Windows Azure peuvent &ecirc;tre int&eacute;gr&eacute;s dans des applications pour &eacute;tendre leurs fonctionnalit&eacute;s. Vous apprendrez &agrave; r&eacute;pondre aux besoins communs tels que la capacit&eacute; de calcul, le stockage, l&#39;authentification, etc. Pour d&eacute;montrer des concepts, cet atelier se concentre sur Windows 8 et Windows Phone, bien que les concepts puissent &ecirc;tre appliqu&eacute;s &agrave; n&#39;importe quelle plateforme, y compris Android et iOS.</p>
<p>Enregistrez-vous d&egrave;s aujourd&rsquo;hui: <a href="http://aka.ms/connectedappswithazure">aka.ms/connectedappswithazure</a></p>
<h2><strong>29 octobre &#8211; Migrating Apps to Windows Azure</strong></h2>
<p>Explorez les diff&eacute;rentes options de migration d&rsquo;applications. Soyez au courant des&nbsp;pr&eacute;occupations et des consid&eacute;rations &agrave; garder &agrave; l&#39;esprit lors de la planification d&#39;une migration, et apprenez &agrave; mettre en &oelig;uvre un plan de migration pour migrer les applications locales (ou h&eacute;berg&eacute;es traditionnellement) vers Windows Azure.</p>
<p>Enregistrez-vous d&egrave;s aujourd&rsquo;hui: <a href="http://aka.ms/migratingtoazure">aka.ms/migratingtoazure</a></p>
<p>&nbsp;</p>
<p>Pour plus d&#39;informations, vous pouvez aller sur les <a href="http://www.microsoft.com/canada/azureworkshops/home.aspx">ateliers de Windows Azure Virtual</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/billet-technique/ateliers-avances-windows-azure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meilleures pratiques au niveau infrastructure pour une performance optimale de BizTalk Server</title>
		<link>http://matricis.com/billet-technique/meilleures-pratiques-au-niveau-infrastructure-pour-une-performance-optimale-de-biztalk-server/</link>
		<comments>http://matricis.com/billet-technique/meilleures-pratiques-au-niveau-infrastructure-pour-une-performance-optimale-de-biztalk-server/#comments</comments>
		<pubDate>Mon, 06 Aug 2012 19:21:55 +0000</pubDate>
		<dc:creator>Marc-André Dufresne</dc:creator>
				<category><![CDATA[Billet technique]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=2937</guid>
		<description><![CDATA[Introduction Microsoft BizTalk Server est un produit qui est difficile &#224; ajuster pour am&#233;liorer la performance puisque chaque solution demande des param&#232;tres diff&#233;rents. La quantit&#233; de messages re&#231;us, leur taille, le type de traitement requis, les besoins de tra&#231;abilit&#233; et le mode de transport des messages sont toutes des variables <a href="http://matricis.com/billet-technique/meilleures-pratiques-au-niveau-infrastructure-pour-une-performance-optimale-de-biztalk-server/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Microsoft BizTalk Server est un produit qui est difficile &agrave; ajuster pour am&eacute;liorer la performance puisque chaque solution demande des param&egrave;tres diff&eacute;rents. La quantit&eacute; de messages re&ccedil;us, leur taille, le type de traitement requis, les besoins de tra&ccedil;abilit&eacute; et le mode de transport des messages sont toutes des variables qui influenceront les param&egrave;tres optimaux d&rsquo;une solution BizTalk.</p>
<p>Le pr&eacute;sent article a pour but d&rsquo;identifier les param&egrave;tres importants &agrave; configurer dans le tableau de bord des param&egrave;tres BizTalk (<em>BizTalk Settings Dashboard</em>) et d&rsquo;&eacute;valuer l&rsquo;impact du suivi (<em>tracking</em>) sur la performance.</p>
<h2>S&eacute;paration des h&ocirc;tes</h2>
<p>Dans tous les environnements BizTalk en production, les fonctions devraient &ecirc;tre s&eacute;par&eacute;es sur diff&eacute;rents h&ocirc;tes. La configuration de base recommand&eacute;e est d&rsquo;avoir un h&ocirc;te d&eacute;di&eacute; pour la r&eacute;ception, l&rsquo;envoi, le traitement et le suivi des messages. Ensuite, selon la solution impl&eacute;ment&eacute;e, les h&ocirc;tes peuvent &ecirc;tre s&eacute;par&eacute;s pour diff&eacute;rentes raisons :</p>
<ul>
<li>la s&eacute;curit&eacute;;</li>
<li>la taille des messages diff&eacute;rente sur certains ports ou orchestrations;</li>
<li>la conservation de l&rsquo;ordre des messages;</li>
<li>optimiser la latence sur certaines parties de la solution;</li>
<li>etc.</li>
</ul>
<h2>Throttling</h2>
<p>Le throttling (limitation en fran&ccedil;ais) est un m&eacute;canisme de protection permettant &agrave; BizTalk de limiter le d&eacute;bit de messages dans certaines conditions. Ce m&eacute;canisme permet aux autres processus BizTalk qui s&rsquo;ex&eacute;cutent en parall&egrave;le de continuer normalement lorsque le serveur est surcharg&eacute;.</p>
<p>Pour des h&ocirc;tes 64 bits, les param&egrave;tres par d&eacute;faut doivent &ecirc;tre modifi&eacute;s parce qu&rsquo;il est possible d&rsquo;adresser plus de m&eacute;moire sur un h&ocirc;te 64 bits.</p>
<p>Lorsque BizTalk est utilis&eacute; en mode &laquo;&nbsp;messagerie&nbsp;&raquo; (sans orchestration), deux types de throttling peuvent s&rsquo;appliquer, le &laquo;&nbsp;resource based throttling&nbsp;&raquo; et le &laquo;&nbsp;rate based throttling&nbsp;&raquo;. Le premier type se produit lorsque la quantit&eacute; d&rsquo;une ressource, m&eacute;moire ou CPU, est surutilis&eacute;e. BizTalk ralentira le d&eacute;bit de messages pour laisser une certaine quantit&eacute; de ressources aux autres processus.</p>
<p>La limitation bas&eacute;e sur le d&eacute;bit se produit lors de la publication des messages (dans le MessageBox) ou lors de la livraison des messages. Lors de la publication des messages, le throttling se produit lorsque le rythme auquel les messages sont re&ccedil;us exc&egrave;de le rythme auquel les messages sont publi&eacute;s. Le m&ecirc;me principe est appliqu&eacute; lors de la livraison des messages. Lorsque le rythme de livraison des messages est en de&ccedil;&agrave; du rythme de traitement des messages, le throttling s&rsquo;active. Les seuils peuvent &ecirc;tre modifi&eacute;s dans le tableau de bord des param&egrave;tres BizTalk.</p>
<h2>Intervalles d&rsquo;interrogation des h&ocirc;tes</h2>
<p>Les intervalles d&rsquo;interrogation (Polling Intervals) sont les principaux param&egrave;tres &agrave; modifier lorsque l&rsquo;on d&eacute;sire r&eacute;duire le temps de traitement global dans BizTalk. Il faut &ecirc;tre vigilant lorsqu&rsquo;on modifie ces param&egrave;tres parce que plus le temps est court, plus le message se traitera rapidement, mais plus le temps est bas, plus SQL Server sera sollicit&eacute;. Il faut trouver un &eacute;quilibre selon la solution entre la latence requise et la performance globale de la solution. G&eacute;n&eacute;ralement, la valeur minimale recommand&eacute;e est 50 ms.</p>
<p>Une des am&eacute;liorations de Microsoft BizTalk Server 2010 par rapport &agrave; BizTalk 2009 est la possibilit&eacute; de r&eacute;gler ces param&egrave;tres au niveau des h&ocirc;tes plut&ocirc;t qu&rsquo;au niveau du groupe. C&rsquo;est un &eacute;l&eacute;ment qui apporte beaucoup de flexibilit&eacute; lorsque la latence est importante seulement sur certains ports.</p>
<h2>Param&eacute;trage des instances d&rsquo;h&ocirc;tes</h2>
<p>Malheureusement, les param&egrave;tres des instances d&rsquo;h&ocirc;tes par d&eacute;faut ne sont pas ceux qui sont recommand&eacute;s par Microsoft. &Agrave; chaque fois qu&rsquo;un h&ocirc;te est cr&eacute;&eacute;, les param&egrave;tres doivent &ecirc;tre ajust&eacute;s aux valeurs suivantes :</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/07/param_instances_host_BizTalk.png"><img alt="" class="alignnone size-full wp-image-2953" height="258" src="http://matricis.com/wp-content/uploads/2012/07/param_instances_host_BizTalk.png" title="param_instances_host_BizTalk" width="563" /></a></p>
<p>Ces param&egrave;tres sont ad&eacute;quats pour un serveur avec un seul processeur. Le param&egrave;tre&nbsp;&laquo;&nbsp;Maximum worker threads&nbsp;&raquo; doit &ecirc;tre&nbsp; de 100 par processeur.</p>
<h3>Tests avec BizTalk Benchmark Wizard</h3>
<p>BizTalk Benchmark Wizard (<a href="http://bbw.codeplex.com/" target="_blank">http://bbw.codeplex.com/</a>) a &eacute;t&eacute; utilis&eacute; pour v&eacute;rifier l&rsquo;impact d&rsquo;utiliser le mode 32 ou 64 bit et l&rsquo;impact des param&egrave;tres recommand&eacute;s versus les param&egrave;tres par d&eacute;faut. Les param&egrave;tres de throttling n&rsquo;ont pas &eacute;t&eacute; modifi&eacute;s parce qu&rsquo;ils n&rsquo;ont pas d&rsquo;impact dans un environnement contr&ocirc;l&eacute; o&ugrave; la taille des messages et le d&eacute;bit est constant.</p>
<p>Voir <a href="http://blogs.msdn.com/b/ewanf/archive/2010/01/12/benchmark-your-biztalk-server-part-3.aspx" target="_blank">http://blogs.msdn.com/b/ewanf/archive/2010/01/12/benchmark-your-biztalk-server-part-3.aspx</a> pour la description de la solution de BizTalk Benchmark Wizard. L&rsquo;application envoie le message suivant avec Loadgen.</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/07/message_example_loadgen.png"><img alt="" class="alignnone size-full wp-image-2954" height="53" src="http://matricis.com/wp-content/uploads/2012/07/message_example_loadgen.png" title="message_example_loadgen" width="540" /></a></p>
<p><strong>Environnement&nbsp;:</strong></p>
<p>Machine virtuelle VMware Player avec 2 vCPU, 5 Go de RAM, Windows Server 2008 R2 avec Microsoft BizTalk Server 2010 et SQL Server 2008 R2 install&eacute; sur le m&ecirc;me serveur.</p>
<p><strong>Param&egrave;tres par d&eacute;faut 64 bits</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width: 192px;">
<p align="center"><strong>Compteur</strong></p>
</td>
<td style="width: 62px;">
<p align="center"><strong>Valeur</strong></p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processor time</p>
</td>
<td style="width: 62px;">
<p>91</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processed msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>158</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Receive msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>159</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong>Param&egrave;tres recommand&eacute;s (100, 25, 100, 25) 64 bits</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width: 192px;">
<p align="center"><strong>Compteur</strong></p>
</td>
<td style="width: 62px;">
<p align="center"><strong>Valeur</strong></p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processor time</p>
</td>
<td style="width: 62px;">
<p>92</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processed msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>156</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Receive msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>155</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong>Param&egrave;tres par d&eacute;faut 32 bits</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width: 192px;">
<p align="center"><strong>Compteur</strong></p>
</td>
<td style="width: 62px;">
<p align="center"><strong>Valeur</strong></p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processor time</p>
</td>
<td style="width: 62px;">
<p>99</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processed msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>157</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Receive msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>156</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong>Param&egrave;tres recommand&eacute;s (100, 25, 100, 25) 32 bits</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width: 192px;">
<p align="center"><strong>Compteur</strong></p>
</td>
<td style="width: 62px;">
<p align="center"><strong>Valeur</strong></p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processor time</p>
</td>
<td style="width: 62px;">
<p>92</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processed msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>159</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Receive msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>159</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Avec le sc&eacute;nario de BizTalk Benchmark Wizard avec le serveur de test, l&rsquo;impact des param&egrave;tres est minime. Avec un serveur plus puissant et des messages&nbsp;plus volumineux, l&rsquo;impact des param&egrave;tres aurait probablement &eacute;t&eacute; plus significatif.</p>
<h2>Impact du suivi sur la performance</h2>
<p>Dans la plupart des guides d&rsquo;optimisation de performance de BizTalk, il est toujours mentionn&eacute; de r&eacute;duire le suivi (tracking) au minimum et de le d&eacute;sactiver si possible. En r&eacute;alit&eacute;, le suivi est souvent n&eacute;cessaire pour offrir de la tra&ccedil;abilit&eacute; et faciliter la r&eacute;solution de probl&egrave;mes. Pour r&eacute;duire son impact, un serveur BizTalk peut &ecirc;tre d&eacute;di&eacute; au suivi.</p>
<h3>Tests du suivi sur BizTalk Benchmark Wizard</h3>
<p>Tous les tests ont &eacute;t&eacute; r&eacute;alis&eacute;s avec les param&egrave;tres recommand&eacute;s par Microsoft (100, 25, 100, 25) sur des h&ocirc;tes 32 bits.</p>
<p><strong>Messaging seulement, suivi d&eacute;sactiv&eacute;</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width: 192px;">
<p align="center"><strong>Compteur</strong></p>
</td>
<td style="width: 62px;">
<p align="center"><strong>Valeur</strong></p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processor time</p>
</td>
<td style="width: 62px;">
<p>91</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processed msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>171</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Receive msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>170</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong>Messaging seulement, suivi des propri&eacute;t&eacute;s dans tous les ports et pipelines</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width: 192px;">
<p align="center"><strong>Compteur</strong></p>
</td>
<td style="width: 62px;">
<p align="center"><strong>Valeur</strong></p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processor time</p>
</td>
<td style="width: 62px;">
<p>91</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processed msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>127</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Receive msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>126</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong>Messaging seulement, suivi des propri&eacute;t&eacute;s et du corps des messages dans tous les ports et pipelines</strong></p>
<table border="1" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td style="width: 192px;">
<p align="center"><strong>Compteur</strong></p>
</td>
<td style="width: 62px;">
<p align="center"><strong>Valeur</strong></p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processor time</p>
</td>
<td style="width: 62px;">
<p>91</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Processed msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>74</p>
</td>
</tr>
<tr>
<td style="width: 192px;">
<p>Avg Receive msgs / sec (*)</p>
</td>
<td style="width: 62px;">
<p>73</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Les param&egrave;tres des h&ocirc;tes &eacute;taient les m&ecirc;mes pour tous les tests. Suivre seulement les propri&eacute;t&eacute;s des messages et les &eacute;v&eacute;nements occasionne une p&eacute;nalit&eacute; d&rsquo;environ 25%. Avec des disques s&eacute;par&eacute;s pour la base de donn&eacute;es de suivi, la p&eacute;nalit&eacute; aurait probablement &eacute;t&eacute; moindre. En contrepartie, le suivi du corps des messages diminue la performance d&rsquo;environ 60%.</p>
<p>Le suivi du corps des messages devrait effectivement &ecirc;tre r&eacute;duit &agrave; un minimum, mais le co&ucirc;t de suivre les propri&eacute;t&eacute;s est relativement faible. &Agrave; moins que la partie BizTalk de l&rsquo;environnement d&rsquo;int&eacute;gration soit presqu&rsquo;&agrave; pleine capacit&eacute;, activer le suivi des propri&eacute;t&eacute;s sur certains ports ne devrait pas causer de probl&egrave;me de performance. De plus, normalement, le suivi ne sera probablement pas activ&eacute; sur tous les ports.</p>
<h2>Conclusion</h2>
<p>Nous avons observ&eacute; que l&rsquo;impact des param&egrave;tres recommand&eacute;s &eacute;tait minime et que l&rsquo;impact sur le suivi &eacute;tait &eacute;norme. Les conclusions apport&eacute;es dans cet article peuvent seulement &ecirc;tre appliqu&eacute;s dans une solution r&eacute;elle si la taille des messages re&ccedil;us est extr&ecirc;mement petite et qu&rsquo;il n&#39;y a que tr&egrave;s peu ou pas de traitement. Dans tous les cas, il est pr&eacute;f&eacute;rable d&rsquo;utiliser les valeurs recommand&eacute;es par Microsoft comme point de d&eacute;part. Ensuite, le suivi du corps des messages devrait &ecirc;tre &eacute;limin&eacute; ou r&eacute;duit au minimum. C&rsquo;est de loin le param&egrave;tre qui influence le plus la performance d&rsquo;un environnement BizTalk en sant&eacute;.</p>
<p>La performance d&rsquo;un environnement d&rsquo;int&eacute;gration ne se r&eacute;sume pas au contenu de cet article. Le guide d&rsquo;optimisation des performances de BizTalk indique toutes les techniques et meilleures pratiques pour am&eacute;liorer la performance des solutions&nbsp;BizTalk.</p>
<h2>S&#39;applique &agrave;</h2>
<p>Microsoft&nbsp;BizTalk Server version 2009 et 2010</p>
<h2>R&eacute;f&eacute;rences et liens int&eacute;ressants&nbsp;</h2>
<p><a href="http://msdn.microsoft.com/en-us/library/aa561380(v=bts.20).aspx" target="_blank">http://msdn.microsoft.com/en-us/library/aa561380(v=bts.20).aspx</a></p>
<p>La solution de BizTalk Benchmark Wizard</p>
<p><a href="http://blogs.msdn.com/b/ewanf/archive/2010/01/12/benchmark-your-biztalk-server-part-3.aspx" target="_blank">http://blogs.msdn.com/b/ewanf/archive/2010/01/12/benchmark-your-biztalk-server-part-3.aspx</a></p>
<p>Consid&eacute;rations pour un serveur BizTalk 64 bit</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ee308808(v=bts.10).aspx" target="_blank">http://msdn.microsoft.com/en-us/library/ee308808(v=bts.10).aspx</a></p>
<p>BizTalk Server 2010 Performance Optimization Guide</p>
<p><a href="http://www.microsoft.com/download/en/details.aspx?id=10855" target="_blank">http://www.microsoft.com/download/en/details.aspx?id=10855</a></p>
<p><a href="http://matricis.com/wp-content/uploads/2012/08/biztalk_server_hostconfig.xml" target="_blank">Configuration </a>du groupe, des h&ocirc;tes et des instances d&rsquo;h&ocirc;tes utilis&eacute;s dans les tests</p>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/billet-technique/meilleures-pratiques-au-niveau-infrastructure-pour-une-performance-optimale-de-biztalk-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Orchestration Maintainability Practices in Microsoft BizTalk Server</title>
		<link>http://matricis.com/billet-technique/orchestration-maintainability-practices-microsoft-biztalk-server/</link>
		<comments>http://matricis.com/billet-technique/orchestration-maintainability-practices-microsoft-biztalk-server/#comments</comments>
		<pubDate>Thu, 02 Aug 2012 19:21:41 +0000</pubDate>
		<dc:creator>Christos Karras</dc:creator>
				<category><![CDATA[Billet technique]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=3101</guid>
		<description><![CDATA[Introduction Microsoft BizTalk Server orchestrations essentially allow running a sequence of steps in a process, which can involve several systems. Orchestrations can quickly get hard to understand and maintain because of various sources of complexity, as shown below. This article describes a few practices, in addition to ones that are <a href="http://matricis.com/billet-technique/orchestration-maintainability-practices-microsoft-biztalk-server/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Microsoft BizTalk Server orchestrations essentially allow running a sequence of steps in a process, which can involve several systems. Orchestrations can quickly get hard to understand and maintain because of various sources of complexity, as shown below.</p>
<p>This article describes a few practices, in addition to ones that are already well documented<a href="#OtherOrchestrationPractices"><sup>[1]</sup></a>, that can be used to reduce the complexity of orchestrations and make them easier to understand.</p>
<h2>Variables and messages scopes</h2>
<p>In C# code, a good practice is to declare variables as close as possible to where they are used, so that the variable&#39;s role becomes more obvious.&nbsp;</p>
<p><img alt="" class="size-full wp-image-3012 alignnone" height="377" src="http://matricis.com/wp-content/uploads/2012/07/BadCSharpScoping.png" title="BadCSharpScoping" width="482" /><br />
	<span style="font-size: 10px;">Example C# code where scope is wider than necessary</span></p>
<p><img alt="" class="size-full wp-image-3016 alignnone" height="241" src="http://matricis.com/wp-content/uploads/2012/07/ImprovedCSharpScoping.png" title="ImprovedCSharpScoping" width="464" /><br />
	<span style="font-size: 10px;">Improved C# code, where each variable&#39;s scope is restricted to where it is being used</span></p>
<p>An analogous practice in a BizTalk orchestration is to declare variables or messages in the scope where they will be used, instead of declaring all variables and messages at the top level of the orchestrations. It&#39;s even usually a good idea to introduce scopes in orchestrations whose role is simply to group a sequence of related steps, <em>including the variables and messages used by these steps</em>. &nbsp;This way, the variables/messages will be encapsulated in the context where they are relevant. It also improves performance by reducing the number of variables that have to be serialized at each persistence point.</p>
<p><img class="size-full wp-image-3023 wp-caption alignnone" title="BadOrchestrationScoping" alt="" src="http://matricis.com/wp-content/uploads/2012/07/BadOrchestrationScoping3.png" width="289" height="431" /><br />
	<span style="font-size: 11px;">Example orchestration with scope wider than necessary</span></p>
<p>&nbsp;</p>
<p><img alt="" class="alignnone size-full wp-image-3026" height="814" src="http://matricis.com/wp-content/uploads/2012/07/ImprovedOrchestrationScoping.png" title="ImprovedOrchestrationScoping" width="299" /><br />
	<span style="font-size: 10px;">Refactored example: all messages, variables and correlation sets moved to the scope where they are used</span></p>
<p>This practice can make a complex orchestration significantly easier to understand, which is important for maintainability. When looking at an orchestration&#39;s variables/messages, a developer will want to know:</p>
<ul>
<li>What&rsquo;s the role of the variable/message?</li>
<li>Where&#39;s the variable/message used?</li>
<li>What are the impacts if a change is made to the way the variable/message is used (for example for a fix, requirements change or refactoring)?</li>
</ul>
<p>If an orchestration has 30 variables or messages declared in &quot;global&quot; scope (top level), a developer would have to look at each shape to find the answer to these questions. This can make understanding an orchestration very hard and even harder to modify it.</p>
<p>To avoid this problem, it is better to move, as much as possible, variables and message declarations to the smaller scope where they will be used. This way, to analyze the role of a variable/message or the impacts of a change, a developer will only have to look at a few shapes instead of the whole orchestration.</p>
<p>Obviously, there will still be messages at the &quot;global&quot; scope (at least the initial message an orchestration receives), but these should be kept to a minimum.</p>
<h2>Split orchestrations into smaller orchestrations</h2>
<p>The &quot;Call Orchestration&quot; shape can be used to call orchestrations that contain common code that is reused across several orchestrations. However, its usefulness is not limited to enabling code reuse. An even more beneficial use of this shape is to break down a complex orchestration into smaller ones, even if each smaller orchestration is not reused anywhere else.</p>
<p>Each smaller orchestration can be given a descriptive name saying what it does. This allows having a high level orchestration that&#39;s mostly composed of a sequence of calls to other orchestrations. By reading the name of each called orchestration, a developer can understand what the higher level orchestration is doing, without looking at the technical details.This is similar to breaking down, in C#, a complex method into smaller methods.</p>
<p>Note that grouping variables into scopes can be a good first step before splitting some parts of an orchestration into smaller orchestrations: start by dividing the orchestration into scopes, and then move the more complex scopes to a separate orchestration.</p>
<p>The example below shows how the example in the previous section could be refactored into smaller orchestrations:</p>
<p><img alt="" class="alignnone size-full wp-image-3028" height="327" src="http://matricis.com/wp-content/uploads/2012/07/SplitIntoSmallerOrchestrations.png" title="SplitIntoSmallerOrchestrations" width="397" /><br />
	<span style="font-size: 10px;">Refactored orchestration: delegates most of its work to other called orchestrations</span></p>
<h2>Information hiding by using object-oriented classes in orchestrations</h2>
<p>Putting messages/variables in orchestration scopes is one basic way to hide information in the context where it is relevant. Splitting complex code in several smaller methods (or smaller orchestrations) is another way. To go further, it&#39;s also possible to uses .Net classes to encapsulate (hide information) by moving code and its associated data to a class.</p>
<p>This is a widely used practice in C# applications, but it can also be used with BizTalk orchestrations. To use it, we take advantage of the fact that an orchestration variable can be any .Net class, as long as it&#39;s <span style="font-family: &quot;courier new&quot;, courier, monospace;">Serializable</span> (marked with the <span style="font-family: &quot;courier new&quot;, courier, monospace;">[Serializable]</span>attribute). (non-Serializable classes could be used in atomic scopes, but this is usually not the preferred solution)</p>
<p>A serializable class used as an orchestration variable can encapsulate (by using private members) some state about the process being performed by the orchestration. If the orchestration is dehydrated, all the class member&#39;s (including private ones) are serialized and persisted to BizTalk&#39;s database. When the orchestration is rehydrated, that state is restored.</p>
<p>This means that the orchestration can delegate some steps of a process to a class, to simplify the orchestration. Also, since the variables required by the class are kept as private fields of the class, the orchestration does not need to know about these variables. Therefore, it is usually a better solution than simply calling classes with static methods, which would require passing the values of several variables between the orchestration and the various methods it invokes throughout a process.</p>
<p>For example, the sequence diagram below shows the interactions between an orchestration and a class with static methods. The orchestration has to keep variables for the return values of each of the class&#39;s static methods, and then pass these values to other methods of the same static class.</p>
<p><img alt="" class="alignnone size-full wp-image-3029" height="342" src="http://matricis.com/wp-content/uploads/2012/07/ProceduralInteractions.png" title="ProceduralInteractions" width="576" /><br />
	<span style="font-size: 10px;">Overview of procedural interactions between an orchestration and a static class</span></p>
<p>This can be simplified by keeping intermediate values as private fields or local variables in the class. Also, not all methods of the class need to be public, some can be made private, and only the public methods need to be invoked by the orchestration. Finally, the &quot;MapInternalClientIdToOtherSystemClientId&quot; method should be moved to another class, so that each class has a single responsibility (one class for file name generation, another for Client ID mapping). However, the orchestration needs only to interact with the &quot;FileNameGenerator&quot; class, and the exact type of ClientID needed for the file names (other system ClientID instead of internal ClientID) is a fact hidden to the orchestration.</p>
<p><img alt="" class="alignnone size-full wp-image-3030" height="307" src="http://matricis.com/wp-content/uploads/2012/07/RefactoredExampleWithStatefulObjects.png" title="RefactoredExampleWithStatefulObjects" width="576" /></p>
<p><span style="font-size: 10px;">Refactored object-oriented example, with reduce number of informations that must be known to the orchestration</span></p>
<p>This allows limiting the impacts of a change. Instead of having ripple effects throughout an orchestration, a change can now be done within a class. The change is also easier to test using simple C# unit tests (for example using NUnit<sup><a href="#NUnit">[2]</a></sup> or MSTest<a href="#MSTest"><sup>[3]</sup></a>).</p>
<p>When designing these classes, take in consideration the SOLID principles<a href="#SOLID"><sup>[4]</sup></a>. One of these principles is the Single Responsibility Principle, which states that a class should have only one responsibility. Also note that it&#39;s possible for a BizTalk orchestration to call a class which itself calls other classes in order to better separate responsibilities across classes, as long as all the classes are Serializable.&nbsp;</p>
<p>More complex cases could even use objects that are part of a domain model (designed using Domain-Driven Design), or design patterns such as the State pattern. However, this possibility can be taken too far by giving too many responsibilities to BizTalk (the orchestration and its associated classes). Orchestrations are useful to coordinate between different parts of a business process (for example, by calling web services that represent a business application&#39;s public interface), but they are usually not the best location for the business logic itself.</p>
<h2>Conclusion&nbsp;</h2>
<p>BizTalk Orchestrations, like .Net code, can quickly become hard to maintain if they are too complex. This article described a few practices that are commonly used in object-oriented languages, and has shown how the same practices can be applied to BizTalk orchestrations:</p>
<ul>
<li>
<p>Limit a variable&#39;s scope to the smallest possible scope where the variable is used;</p>
</li>
<li>
<p>Breaking down complex components into a set of smaller ones;</p>
</li>
<li>
<p>Information hiding using private fields in .Net classes, and public methods that perform work on the object&#39;s private state, which prevents the calling code from having to know how the object&#39;s state is managed.</p>
</li>
</ul>
<h2>Applies to</h2>
<p>&nbsp;All Microsoft BizTalk Server versions from 2004 to 2010.</p>
<h2>References</h2>
<ul>
<li><a name="OtherOrchestrationPractices"><sup>[1]</sup></a> Other well-documented good practices to follow when developing orchestrations:
<ul>
<li><a href="http://social.technet.microsoft.com/wiki/contents/articles/5210.biztalk-server-2010-orchestration-best-practices.aspx" target="_blank">http://social.technet.microsoft.com/wiki/contents/articles/5210.biztalk-server-2010-orchestration-best-practices.aspx</a></li>
<li><a href="http://www.biztalkgurus.com/biztalk_server/biztalk_blogs/b/biztalk/archive/2012/07/09/five-rules-to-simplify-large-scale-biztalk-orchestration-development.aspx" target="_blank">http://www.biztalkgurus.com/biztalk_server/biztalk_blogs/b/biztalk/archive/2012/07/09/five-rules-to-simplify-large-scale-biztalk-orchestration-development.aspx</a></li>
</ul>
</li>
<li><a name="MSTest"><sup>[2]</sup></a> MSTest:&nbsp;<a href="http://en.wikipedia.org/wiki/Visual_Studio_Unit_Testing_Framework" target="_blank">http://en.wikipedia.org/wiki/Visual_Studio_Unit_Testing_Framework</a></li>
<li><a name="NUnit"><sup>[3]</sup></a> NUnit: <a href="http://www.nunit.org/" target="_blank">http://www.nunit.org/</a></li>
<li>
<div><a name="SOLID"><sup>[4]</sup></a> SOLID principles:</div>
<ul>
<li>
<div><a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod" target="_blank">http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod</a></div>
</li>
<li>
<div><a href="http://lostechies.com/chadmyers/2008/03/08/pablo-s-topic-of-the-month-march-solid-principles/" target="_blank">http://lostechies.com/chadmyers/2008/03/08/pablo-s-topic-of-the-month-march-solid-principles/</a></div>
</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/billet-technique/orchestration-maintainability-practices-microsoft-biztalk-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Azure Tools Belt: Auto-scaling Application Block – WASABi</title>
		<link>http://matricis.com/billet-technique/azure-tools-belt-application-auto-scaling-bloc-wasabi/</link>
		<comments>http://matricis.com/billet-technique/azure-tools-belt-application-auto-scaling-bloc-wasabi/#comments</comments>
		<pubDate>Wed, 01 Aug 2012 12:12:41 +0000</pubDate>
		<dc:creator>François Boucher</dc:creator>
				<category><![CDATA[Billet technique]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=3092</guid>
		<description><![CDATA[One of the questions that clients often ask is: What tools could be used for Windows Azure development. Everyone knows that you need a web browser and a code editor (ex: Visual Studio), but what else? So, I decided to do a serie of posts to present them. This second <a href="http://matricis.com/billet-technique/azure-tools-belt-application-auto-scaling-bloc-wasabi/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<p>One of the questions that clients often ask is: What tools could be used for Windows Azure development. Everyone knows that you need a web browser and a code editor (ex: Visual Studio), but what else? So, I decided to do a serie of posts to present them. This second post is about the Auto-scaling&nbsp;Application Block or WASABi for friends.</p>
<p>This serie is not meant to be an exhaustive list of all tools. Some other excellent tools are surely available. If you think I have forgotten one or want me to talk about one, let me know. I will be more than happy to adding it to the list.</p>
<h4>Already in the Azure Tools Belt:</h4>
<ul>
<li><a href="http://www.frankysnotes.com/2012/07/azure-tools-belt-sql-azure-migration_8.html" target="_blank">SQL Azure Migration Wizard</a></li>
</ul>
<h2>What is WASABi?</h2>
<p>To achieve elasticity until now, you needed to do it manually through the Azure Management Portal or writing your own code using the REST API. Using WASABi, you just need to define some rules and the application will scale automatically: It can use a schedule or can be triggered by metrics, for example running fewer instances at night or adding extra instances if the CPUs are used at more than 80%.</p>
<p>The auto-scaling application block can be hosted either in a Windows Azure role or in an on-premises application. The auto-scaling application is typically hosted in a separate application from the target application that you want to scale.</p>
<p>Various scenarios are available to help you manage the auto-scaling by dynamically changing instance counts or performing application throttling of web/worker roles. The rules can auto scale based on timetables or metrics collected from the application and/or Windows Azure. You can even use notifications to preview any scaling operations before they take place and you can also use some PowerShell cmdlets to manage the autoscaler. You can constrain the auto scaling by:</p>
<ul>
<li>Setting the instance counts upper and lower bounds</li>
<li>Preventing fast oscillations in the number of role instances with the stabilizer</li>
<li>Limiting scaling operations acknowledging billing hours</li>
</ul>
<h2>How to use it</h2>
<p>For this demo, we will use a simple Hello world application and scale it with a rule via a console application based on time.</p>
<h3>Step 1: Put the app in Azure</h3>
<p><a href="http://lh6.ggpht.com/-Jd8pDoU2F1o/UBh12T_QgOI/AAAAAAAALhw/vd_nmc4j5gI/s1600-h/clip_image0014%25255B1%25255D.png"><img align="right" alt="clip_image001[4]" border="0" height="213" src="http://lh5.ggpht.com/-BVejfRmCEEE/UANXyUu0WFI/AAAAAAAALh4/vwXKz6I1fG8/clip_image0014_thumb%25255B1%25255D.png?imgmax=800" style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: right; display: inline; background-image: none;" title="clip_image001[4]" width="320" /></a>To get started, an Azure application is needed. Don&rsquo;t forget to assign a certificate since the console application will need it.</p>
<p>You can then publish the application on the cloud.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Step 2: Adding the scaling application</h3>
<p><a href="http://lh6.ggpht.com/-aAe9obH_Rtk/UANXy3s3kkI/AAAAAAAALaM/28pWd1-rbEs/s1600-h/clip_image002%25255B4%25255D%25255B2%25255D.png" style="clear: right; margin-bottom: 1em; margin-left: 1em; float: right;"><img alt="clip_image002[4]" border="0" height="244" src="http://lh4.ggpht.com/-UVmFcvsYxNM/UANXziFyk1I/AAAAAAAALaU/AFRTkN32_kI/clip_image002%25255B4%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image002[4]" width="235" /></a>Now, create a console application and name it AutoScalingConsole. Add the WASABi package by executing: Install-Package EnterpriseLibrary.WindowsAzure.Autoscaling.<br />
	It should run without error and your Solution should look like this.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>Step 3: Add and configure the rules</h3>
<p>Add a new file called Rules.xml and set the property Copy to Output Directory: Copy always. Copy-paste this xml into the rules file.</p>
<pre class="brush: xml; ruler: true; toolbar: false; auto-links: false; smart-tabs: false;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;rules xmlns=&quot;http://schemas.microsoft.com/practices/2011/entlib/autoscaling/rules&quot;&gt;
  &lt;constraintRules&gt;
    &lt;rule name=&quot;default&quot; enabled=&quot;true&quot; rank=&quot;1&quot; description=&quot;The default constraint rule&quot;&gt;
      &lt;actions&gt;
        &lt;range min=&quot;1&quot; max=&quot;1&quot; target=&quot;AutoscalingApplicationRole&quot;/&gt;
      &lt;/actions&gt;
    &lt;/rule&gt;
    &lt;rule name=&quot;peaktime&quot; enabled=&quot;true&quot; rank=&quot;10&quot; description=&quot;Increase instance count at peak times&quot;&gt;
      &lt;timetable startTime=&quot;20:00:00&quot;  duration=&quot;00:20:00&quot; /&gt;
      &lt;actions&gt;
        &lt;range min=&quot;2&quot; max=&quot;4&quot; target=&quot;AutoscalingApplicationRole&quot;/&gt;
      &lt;/actions&gt;
    &lt;/rule&gt;
  &lt;/constraintRules&gt;
&lt;/rules&gt;
</pre>
<p>It contains two rules: A default one that is always active, defining minimum and maximum instance counts of 1, and a second one used for scaling. The variable &ldquo;Is rank&rdquo; with a value of one means that it can be overridden by other constraint rules with a higher rank.&nbsp;Naturally, if that rule is applied, there will be only a single instance of the role.</p>
<p>The second rule is named peaktime. This rule has the same target, a higher rank, a minimum value of two, a maximum value of four. Also a timetable makes the rule active for 20 minutes, starting at 10 minutes from the current time.</p>
<h3>Step 4: Define the service model</h3>
<p>You will now add a new xml file called services.xml and set the property Copy to Output Directory: Copy always. Copy-paste this xml into the services file.</p>
<pre class="brush: xml; ruler: true; toolbar: false; auto-links: false; smart-tabs: false;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;serviceModel xmlns=&quot;http://schemas.microsoft.com/practices/2011/entlib/autoscaling/serviceModel&quot;&gt;

  &lt;subscriptions&gt;
    &lt;subscription name=&quot;[yoursubscriptionname]&quot;
                  certificateThumbprint=&quot;[yourmanagementcertificatethumbprint]&quot;
                  subscriptionId=&quot;[yoursubscriptionid]&quot;
                  certificateStoreLocation=&quot;CurrentUser&quot; certificateStoreName=&quot;My&quot;&gt;
      &lt;services&gt;
        &lt;service dnsPrefix=&quot;[yourhostedservicednsprefix]&quot; slot=&quot;Staging&quot;&gt;
          &lt;roles&gt;
            &lt;role alias=&quot;AutoscalingApplicationRole&quot; roleName=&quot;AutoscalingApplicationRole&quot; wadStorageAccountName=&quot;elazurehol&quot;/&gt;
          &lt;/roles&gt;
        &lt;/service&gt;
      &lt;/services&gt;
      &lt;storageAccounts&gt;
        &lt;storageAccount alias=&quot;elazurehol&quot;
                        connectionString=&quot;DefaultEndpointsProtocol=https;AccountName=[yourstorageaccountname];AccountKey=[yourstorageaccountkey]&quot;&gt;
        &lt;/storageAccount&gt;
      &lt;/storageAccounts&gt;
    &lt;/subscription&gt;
  &lt;/subscriptions&gt;
&lt;/serviceModel&gt;</pre>
<p>In this file, make the following changes:</p>
<table border="0" cellpadding="2" cellspacing="0" class="tutorial">
<tbody>
<tr>
<td valign="top" width="200">Replace [yoursubscriptionname] with the name of your Windows Azure subscription and [yoursubscriptionid] with your Windows Azure subscription ID.</td>
<td valign="top" width="200"><a href="http://lh3.ggpht.com/-twvFlgHHMEw/UANX0Y8-u-I/AAAAAAAALac/2L0-C7j4KkI/s1600-h/clip_image001%25255B3%25255D.jpg"><img alt="clip_image001" border="0" height="168" src="http://lh5.ggpht.com/-l7yRaEv9R2E/UANX06FqcgI/AAAAAAAALak/3g9Wl_B3FfA/clip_image001_thumb.jpg?imgmax=800" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image001" width="244" /></a></td>
</tr>
<tr>
<td valign="top" width="200">Replace [yourmanagementcertificatethumbprint] with your Windows Azure management certificate thumbprint.</td>
<td valign="top" width="200"><a href="http://lh5.ggpht.com/-KXUlYESuAys/UANX1j5DKSI/AAAAAAAALas/tCeupMg_3kE/s1600-h/clip_image002%25255B3%25255D.jpg"><img alt="clip_image002" border="0" height="169" src="http://lh4.ggpht.com/-QQDhWgHpksQ/UANX2KnYmiI/AAAAAAAALa0/EVmv2Vc8bzk/clip_image002_thumb.jpg?imgmax=800" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image002" width="244" /></a></td>
</tr>
<tr>
<td valign="top" width="200">Replace [yourhostedservicednsprefix] with the URL prefix of your Windows Azure hosted service.</td>
<td valign="top" width="200">&nbsp;</td>
</tr>
<tr>
<td valign="top" width="200">Replace [yourstorageaccountname] with your Windows Azure storage account name and [yourstorageaccountkey] with your Windows Azure storage account primary access key.</td>
<td valign="top" width="200"><a href="http://lh6.ggpht.com/-b9rZskaDavY/UANX2pSIYUI/AAAAAAAALa8/c6QUMOU-Rv8/s1600-h/clip_image003%25255B3%25255D.jpg"><img alt="clip_image003" border="0" height="169" src="http://lh3.ggpht.com/-5uaD9KJKm6I/UANX3OgXRfI/AAAAAAAALbE/pd_0DdTZwoo/clip_image003_thumb.jpg?imgmax=800" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image003" width="244" /></a></td>
</tr>
</tbody>
</table>
<h3>&nbsp;</h3>
<h3>Step 5: Configure the Auto-scaling Application Block</h3>
<p>Right-click on the App.config file in Solution Explorer, add one if needed, then click Edit Configuration File. In the Blocks menu, click Add Autoscaling Settings. Now set the rules.xml and services.xml as sources for Rules Store and Service Information Store. Via the File menu, Save then Exit.</p>
<p><a href="http://lh6.ggpht.com/-qEGpWHvBpnA/UANX3vhISmI/AAAAAAAALbM/Gnz2C9aivkc/s1600-h/wasabidemo_4%25255B3%25255D.png"><img alt="wasabidemo_4" border="0" height="239" src="http://lh6.ggpht.com/-3FqwuIsJx_k/UANX4OwypPI/AAAAAAAALbU/tCCZXeGYxhI/wasabidemo_4_thumb%25255B1%25255D.png?imgmax=800" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="wasabidemo_4" width="355" /></a></p>
<p>To be able to track evolution of the the testing, let&rsquo;s add some logging.&nbsp;In Visual Studio, double-click on the App.config file to open it in the editor. Then add this system.diagnostics at the end of the file:</p>
<pre class="brush: xml; ruler: true; toolbar: false; auto-links: false; smart-tabs: false;">&lt;system.diagnostics&gt;
   &lt;sources&gt;
      &lt;source name=&quot;Autoscaling General&quot;  switchName=&quot;SourceSwitch&quot; switchType=&quot;System.Diagnostics.SourceSwitch&quot; /&gt;
      &lt;source name=&quot;Autoscaling Updates&quot;  switchName=&quot;SourceSwitch&quot; switchType=&quot;System.Diagnostics.SourceSwitch&quot; /&gt;
   &lt;/sources&gt;
   &lt;switches&gt;
      &lt;add name=&quot;SourceSwitch&quot; value=&quot;Verbose, Information, Warning, Error, Critical&quot; /&gt;
   &lt;/switches&gt;
&lt;/system.diagnostics&gt;</pre>
<h3>&nbsp;</h3>
<h3>Step 6: Try it</h3>
<p>You can now run the console application and observe how the auto-scaling rules work with the Azure application. Check the Output window in Visual Studio that logs which rules are being matched.</p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>Using WASABi makes your application elastic but doesn&rsquo;t make your application scalable, you must therefore design for scalability. If you have any comments, suggestions or experiences to share, feel free to let me know by adding a comment, by e-mail or by the contact page.<br />
	&nbsp;</p>
<h2>Where to find More info?</h2>
<ul>
<li>Microsoft Download Center: <a href="http://www.microsoft.com/en-us/download/details.aspx?id=28189">http://www.microsoft.com/en-us/download/details.aspx?id=28189</a></li>
<li>How to Use the auto-scaling Application Block: <a href="https://www.windowsazure.com/en-us/develop/net/how-to-guides/autoscaling">https://www.windowsazure.com/en-us/develop/net/how-to-guides/autoscaling</a></li>
<li>CodePlex: <a href="http://entlib.codeplex.com/">http://entlib.codeplex.com/</a></li>
<li>Nuget: <a href="http://nuget.org/packages/EnterpriseLibrary.WindowsAzure.Autoscaling">http://nuget.org/packages/EnterpriseLibrary.WindowsAzure.Autoscaling</a></li>
<li>How to Create a Storage Account for a Windows Azure Subscription: <a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg433066.aspx">http://msdn.microsoft.com/en-us/library/windowsazure/gg433066.aspx</a></li>
<li>Autoscaling Application Block Logging: <a href="http://msdn.microsoft.com/en-us/library/hh680883(v=pandp.50).aspx">http://msdn.microsoft.com/en-us/library/hh680883(v=pandp.50).aspx</a></li>
<li>Defining Constraint Rules:<a href="http://msdn.microsoft.com/en-us/library/hh680897(v=pandp.50).aspx">http://msdn.microsoft.com/en-us/library/hh680897(v=pandp.50).aspx</a></li>
</ul>
<style type="text/css">.syntaxhighlighter .line.alt2 {   background-color: #f8f8f8 !important;}
table.tutorial td { border:none;}
table.tutorial td { border-top: darkblue 1px solid; border-bottom: darkblue 1px solid; padding:5px;}</style>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/billet-technique/azure-tools-belt-application-auto-scaling-bloc-wasabi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Azure Tools Belt: SQL Azure Migration Wizard</title>
		<link>http://matricis.com/billet-technique/azure-tools-belt-sql-azure-migration-wizard/</link>
		<comments>http://matricis.com/billet-technique/azure-tools-belt-sql-azure-migration-wizard/#comments</comments>
		<pubDate>Thu, 19 Jul 2012 11:59:40 +0000</pubDate>
		<dc:creator>François Boucher</dc:creator>
				<category><![CDATA[Billet technique]]></category>
		<category><![CDATA[azure @fr]]></category>
		<category><![CDATA[AzureSQL @fr]]></category>
		<category><![CDATA[migration @fr]]></category>
		<category><![CDATA[serie]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[toolsbelt]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=2888</guid>
		<description><![CDATA[One of the questions that clients often ask is: What tools could be used for Windows Azure development. Everyone knows that you need a web browser and a code editor (ex: Visual Studio), but what else? So, I decided to do a serie of posts to present them. I&#8217;m therefore <a href="http://matricis.com/billet-technique/azure-tools-belt-sql-azure-migration-wizard/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<style type="text/css">table.tutorial td {border: none;}
table.tutorial td { border-top: darkblue 1px solid; border-bottom: darkblue 1px solid; padding:5px;vertical-align:top;}</style>
<p>One of the questions that clients often ask is: What tools could be used for Windows Azure development. Everyone knows that you need a web browser and a code editor (ex: Visual Studio), but what else? So, I decided to do a serie of posts to present them. I&rsquo;m therefore beginning with the indispensable SQL Azure Migration Wizard, since it&rsquo;s used more often at the beginning of a project.</p>
<p>This serie is not meant to be an exhaustive list of all tools. Some other excellent tools are surely available. If you think I have forgotten one or want me to talk about one, let me know. I will be more than happy to adding it to the list.</p>
<h3><b>What is SQL Azure Migration Wizard?</b></h3>
<p>Most of the Azure projects that are starting these days are migration project or at least contain some data migration. The SQL Azure Migration Wizard, like its name implies, is a tool that will take you be the hand and help you migrate your database. In a few clicks the wizard will bring the database schemas and the data to the cloud. Because Azure SQL database is very similar, but not totally compatible to Windows SQL Server 2008, the Wizard will also provide you a list of things that you should take care of like a missing clustered key.</p>
<h3><b>How to use it</b></h3>
<p>First, I will assume that you already have an active Azure account, if you don&rsquo;t, please follow the instructions on this <a href="http://windowsazure.com/" target="_blank">web page</a>. Then of course you will need the SQLAzureMW tool that you can download on the <a href="http://sqlazuremw.codeplex.com/" target="_blank">CodePlex page project</a>. Let&rsquo;s do a simple migration from a local database to SQL Azure.</p>
<table border="0" cellpadding="0" cellspacing="0" class="tutorial">
<tbody>
<tr>
<td valign="top" width="200"><a href="http://lh4.ggpht.com/-RxPYNRiMYjM/UAdmKLdIZGI/AAAAAAAALcs/SD5WyaVFq-4/s1600-h/clip_image001%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image001[1]" border="0" height="233" src="http://lh3.ggpht.com/-z_SOSfay9Xc/UAdmKwHIg8I/AAAAAAAALc0/EUECMKX5E4g/clip_image001%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image001[1]" width="209" /></a></td>
<td valign="top" width="266">To get started, just double-click on the executable. Some options will be proposed, but in our case we need to select: Analyse / Migrate SQL Database (second choice from the top)</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh6.ggpht.com/-ijqGytFwDSw/UAdmLSRtBrI/AAAAAAAALc8/y4frM9oJw9M/s1600-h/clip_image002%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image002[1]" border="0" height="244" src="http://lh4.ggpht.com/-DyfrOIiahRc/UAdmL11hTEI/AAAAAAAALdE/Km9h6YkTlrI/clip_image002%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image002[1]" width="203" /></a></td>
<td valign="top" width="266">Then pick your source. One nice thing with keeping the Master database selected, the list of all available databases on the specified server will be populated. Once you are done, click the Connect button.</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh6.ggpht.com/-9xEBu64zBBE/UAdmMQlN4PI/AAAAAAAALdM/DteIx_y45V8/s1600-h/clip_image003%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image003[1]" border="0" height="244" src="http://lh3.ggpht.com/-D_md9WCCkKA/UAdmM_CcwxI/AAAAAAAALdU/LbywTp-Z-NA/clip_image003%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image003[1]" width="221" /></a></td>
<td valign="top" width="266">The database used in this demo is a subset of Northwind database with three tables: Products, Suppliers, and Categories. Once you have selected what you want to migrate, click the Next button.</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh4.ggpht.com/-VsUj5bUfV8U/UAdmNbY3WUI/AAAAAAAALdc/iBARqDQlsKQ/s1600-h/clip_image004%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image004[1]" border="0" height="231" src="http://lh6.ggpht.com/-HjgfW6y9izA/UAdmNxrvtpI/AAAAAAAALdk/zUwgqJA36NQ/clip_image004%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image004[1]" width="244" /></a> <a href="http://lh4.ggpht.com/-VdZdZ1vgytw/UAdmOq_WDNI/AAAAAAAALds/ZljOx9LDu_A/s1600-h/clip_image005%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image005[1]" border="0" height="106" src="http://lh5.ggpht.com/-Ya_NXfVI9oM/UAdmOx4imPI/AAAAAAAALd0/OcGiytdYf4A/clip_image005%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image005[1]" width="244" /></a></td>
<td valign="top" width="266">Here three outputs that are generated:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<ol>
<li><u><strong>A result Summary: </strong></u>This explains all the steps made to extract the schemas and data of the database. The analysis will also highlight some incompatibilities and suggest some modifications. In this case, since I have not added any primary keys or indexes, it warned me that a clustered index will be added.</li>
<li><u><strong>SQL Script:</strong></u> A nicely written database creation script that you can save for maintenance.</li>
<li><u><strong>Data file:</strong></u> Since one of the best way to import massive data in SQL Azure database is by using BCP, some data files have been prepared to be imported.</li>
</ol>
<p>Click the Next button to continue.</p>
</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh4.ggpht.com/-XMuQY1NJEVI/UAdmPVy3kSI/AAAAAAAALd8/eNAfnW6dOBo/s1600-h/clip_image006%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image006[1]" border="0" height="59" src="http://lh5.ggpht.com/-ba4YWUsHDf4/UAdmPsKb8SI/AAAAAAAALeE/Y_lSHP8ROU8/clip_image006%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image006[1]" width="244" /></a></td>
<td valign="top" width="266">For the next step you will need a database server in Azure. So connect to the <a href="https://windows.azure.com/" target="_blank">Azure portal</a>, and from the left panel select Database. You can than create a new server by clicking the Create button. You could also use a server that you already have. Put the server name in your clipboard you will needed.</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh3.ggpht.com/-gdjNNGp44DE/UAdmQIs77aI/AAAAAAAALeM/6ilj7vuVRyQ/s1600-h/clip_image007%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image007[1]" border="0" height="244" src="http://lh5.ggpht.com/-9HBpZFA3BQM/UAdmQr-_MVI/AAAAAAAALeU/dLXJsRp5qKQ/clip_image007%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image007[1]" width="201" /></a></td>
<td valign="top" width="266">Back to our SQLAzureMW, paste the full name of the server in the Server name dropdown. It should be something like xxx.database.windows.net Then enter the credentials of your SQL Server. Note that the username should be follow by &ldquo;@&rdquo; and the first part of the server name. Click Connect when you&rsquo;re done.</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh4.ggpht.com/-qvQcTUIzGQ0/UAdmRJoEySI/AAAAAAAALec/zGqrYuLtP64/s1600-h/clip_image008%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image008[1]" border="0" height="244" src="http://lh3.ggpht.com/-OILSnSvzv6U/UAdmRkQ5YkI/AAAAAAAALek/S0Emelnw718/clip_image008%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image008[1]" width="219" /></a></td>
<td valign="top" width="266">Since no database was created, the list is empty. Let&rsquo;s create a new database by clicking the Create Database button. A popup window will ask for the name, location and format of the database to be created. Click Create Database, and after few seconds you should be able to click the Next button to continue.</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh4.ggpht.com/-q9IG5QlG8x8/UAdmSEWU9YI/AAAAAAAALes/UpjnDTnTU9U/s1600-h/clip_image009%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image009[1]" border="0" height="91" src="http://lh6.ggpht.com/-Reqh8LmfVxY/UAdmSbhhoXI/AAAAAAAALe0/ssT2j3FNKOo/clip_image009%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image009[1]" width="244" /></a></td>
<td valign="top" width="266">To see that the new database is really created go on the <a href="https://windows.azure.com/" target="_blank">AzurePortal</a>: you will see it in the database section.</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh3.ggpht.com/-w37oM2qK64w/UAdmS04c81I/AAAAAAAALe8/F1NwvGoI2cU/s1600-h/clip_image010%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image010[1]" border="0" height="244" src="http://lh5.ggpht.com/-BDXh_YSJzpI/UAdmTSg4dtI/AAAAAAAALfE/OaqwxeOuwIc/clip_image010%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image010[1]" width="225" /></a></td>
<td valign="top" width="266">After a quick confirmation, the migration will be done. A nice summary is displayed so you can see if something went wrong. The migration has been performed successfully, click Exit.</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh3.ggpht.com/-ddF6lBRfyeo/UAdmT1WAXiI/AAAAAAAALfM/6Tb8vRpEdQQ/s1600-h/clip_image011%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image011[1]" border="0" height="109" src="http://lh4.ggpht.com/-AA_eeBQiiIA/UAdmUY0vQWI/AAAAAAAALfU/-TEbJS9yQ0I/clip_image011%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; margin: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image011[1]" width="244" /></a></td>
<td valign="top" width="266">You can now connect to the new database by SQL Server Management Studio or by the Azure Management Portal. You can see that the three tables are there and the data has also been migrated.</td>
</tr>
<tr>
<td valign="top" width="200"><a href="http://lh5.ggpht.com/-TI-_O1otfrE/UAdmU002YnI/AAAAAAAALfc/89ip12RSoIQ/s1600-h/clip_image012%25255B1%25255D%25255B2%25255D.png"><img alt="clip_image012[1]" border="0" height="133" src="http://lh3.ggpht.com/-t8OTCu6DwUk/UAdmVCdDE_I/AAAAAAAALfk/tjQyq0hh4Lk/clip_image012%25255B1%25255D_thumb.png?imgmax=800" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="clip_image012[1]" width="244" /></a></td>
<td valign="top" width="266">Like it was supposed to, the index was successfully created. This is really magic!</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h3><b>Conclusion</b></h3>
<p>To conclude, let&rsquo;s say that this tool is really fantastic and that you should definitely try it if you are planning to do a migration. It will save you a lot of time. Please note that the SQLAzureMW does not manage logins and users. I therefore strongly suggest using the <a href="http://aumc.codeplex.com/" target="_blank">Azure User Management Console &ndash; AUMC</a>, available on CodePlex. If you have any comments, suggestions or experiences to share, feel free to let me know by adding a comment, by e-mail or by the contact page.</p>
<p>&nbsp;</p>
<h3><b>References</b></h3>
<ul>
<li>Windows Azure : <a href="https://windows.azure.com/">https://windows.azure.com</a></li>
<li>CodePlex SQLAzureWM: <a href="http://sqlazuremw.codeplex.com/">http://sqlazuremw.codeplex.com</a></li>
<li>Management Portal: <a href="https://manage.windowsazure.com/">https://manage.windowsazure.com</a></li>
<li>Tools and Utilities Support:<a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee621784.aspx">http://msdn.microsoft.com/en-us/library/windowsazure/ee621784.aspx</a></li>
<li>Azure User Management Console &ndash; AUMC: <a href="http://aumc.codeplex.com/">http://aumc.codeplex.com</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/billet-technique/azure-tools-belt-sql-azure-migration-wizard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Release of Azure User Management Console &#8211; AUMC</title>
		<link>http://matricis.com/cloud/release-of-azure-user-management-console-aumc/</link>
		<comments>http://matricis.com/cloud/release-of-azure-user-management-console-aumc/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 15:48:39 +0000</pubDate>
		<dc:creator>François Boucher</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Codeplex]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[user]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=1794</guid>
		<description><![CDATA[We are really happy today to share with you the Azure User Management Console. This tool is a simple graphical user interface (GUI) that manages the User and login of an Azure SQL database. As we were doing many migrations to Azure SQL we build an internal tool to simplify <a href="http://matricis.com/cloud/release-of-azure-user-management-console-aumc/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<p>We are really happy today to share with you the Azure User Management Console. This tool is a simple graphical user interface (GUI) that manages the User and login of an Azure SQL database.</p>
<p>As we were doing many migrations to Azure SQL we build an internal tool to simplify the login and user management. Since only T-SQL commands are available for Azure SQL in SQL Server management Studio, a friendly interface was missing. The AUMC is simply converting your action into T-SQL commands and execute them in the Azure SQL Database.</p>
<p>You can find the Azure User Management Console on CodePlex at:<a href="http://aumc.codeplex.com">http://aumc.codeplex.com</a></p>
<p>&nbsp;</p>
<h2><b>Connect</b></h2>
<p>When you start the application you will be asked to connect to the Azure SQL database.</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_Login.png"><img alt="2012-03-15_AUMC_Login" border="0" height="282" src="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_Login_thumb.png" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="2012-03-15_AUMC_Login" width="404" /></a></p>
<p>Once you log-in you will have the choice to manage Login or User.</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_Main_Connected.png"><img alt="2012-03-15_AUMC_Main_Connected" border="0" height="282" src="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_Main_Connected_thumb.png" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="2012-03-15_AUMC_Main_Connected" width="404" /></a></p>
<p>&nbsp;</p>
<h2>Logins</h2>
<p>If you click on the button &ldquo;Logins&rdquo;, you will see all the existing Logins of the current Azure SQL server. To delete a login just click on this login and then click the button Drop Login on the bottom right of the screen. You will be asked to confirm your request then the list will be refreshing.&nbsp;</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_LoginList.png"><img alt="2012-03-15_AUMC_LoginList" border="0" height="282" src="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_LoginList_thumb.png" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="2012-03-15_AUMC_LoginList" width="404" /></a></p>
<p>&nbsp;</p>
<p>If you want to add a new login then click on &ldquo;Create New Login&rdquo; button on the bottom left of the screen. You will need to specify the login name and password in a popup window.&nbsp;</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_Create_Login.png"><img alt="2012-03-15_AUMC_Create_Login" border="0" height="282" src="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_Create_Login_thumb.png" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="2012-03-15_AUMC_Create_Login" width="404" /></a></p>
<p>&nbsp;</p>
<h2>Users</h2>
<p>Users are attached to a database, so after click on the Users button (from the main windows) you will be asked to select a database. In this case one the DbTest database is available since we can&rsquo;t use the master database.&nbsp;</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_DatabaseList.png"><img alt="2012-03-15_AUMC_DatabaseList" border="0" height="282" src="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_DatabaseList_thumb.png" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="2012-03-15_AUMC_DatabaseList" width="404" /></a></p>
<p>&nbsp;</p>
<p>Once the database is selected the entire list of available users will be displayed. To delete one user, select this user then click on the &ldquo;Drop User&rdquo; button on the bottom right of the windows.&nbsp;</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_User_List.png"><img alt="2012-03-15_AUMC_User_List" border="0" height="282" src="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_User_List_thumb.png" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="2012-03-15_AUMC_User_List" width="404" /></a></p>
<p>&nbsp;</p>
<p>To edit the role of a specific user only double-click on this one. To add a new User click on the button &ldquo;Create User&rdquo; on the bottom left of the windows. You will then be asked to specify the login and the role(s) you want to be attached to this user.&nbsp;</p>
<p><a href="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_Create_user.png"><img alt="2012-03-15_AUMC_Create_user" border="0" height="320" src="http://matricis.com/wp-content/uploads/2012/03/2012-03-15_AUMC_Create_user_thumb.png" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="2012-03-15_AUMC_Create_user" width="240" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/cloud/release-of-azure-user-management-console-aumc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simplify streaming pipeline components in BizTalk</title>
		<link>http://matricis.com/biztalk/tools-to-simply-streaming-pipeline-components-in-biztalk/</link>
		<comments>http://matricis.com/biztalk/tools-to-simply-streaming-pipeline-components-in-biztalk/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 12:15:52 +0000</pubDate>
		<dc:creator>Christos Karras</dc:creator>
				<category><![CDATA[Intégration]]></category>
		<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[Pipelines]]></category>
		<category><![CDATA[Transformation]]></category>

		<guid isPermaLink="false">http://matricis.com/?p=805</guid>
		<description><![CDATA[Introduction There&#39;s a consensus[1] in the BizTalk community that it&#8217;s a good practice to implement pipeline components with a streaming approach. This minimizes the use of memory, by avoiding having a copy of the whole message loaded by each component in a pipeline (which can be a problem for large <a href="http://matricis.com/biztalk/tools-to-simply-streaming-pipeline-components-in-biztalk/">(suite...)</a> ]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>There&#39;s a consensus<a href="#PipeCmpStreamingReferences" style="font-size: .83em; vertical-align: super">[1]</a> in the BizTalk community that it&rsquo;s a good practice to implement pipeline components with a streaming approach. This minimizes the use of memory, by avoiding having a copy of the whole message loaded by each component in a pipeline (which can be a problem for large messages). However, there&#39;s not much guidance on how to actually implement streaming. Yossi Dahan has written a good article on this subject (<a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=20375">Developing a Streaming Pipeline Component for BizTalk Server</a>)&nbsp;that explains how it can be done, but his sample code is somewhat complex because it manages the output buffer and does the transformation within the same method.&nbsp;</p>
<p>This article explains the implementation of two classes that encapsulate the complexity of writing to the output buffer and then reading from it, so that streaming components can be simpler to implement.</p>
<h1>Applicable contexts</h1>
<ul>
<li>Transformation of non-XML data (&quot;flat files&quot;). The pipeline could either transform the non-XML to XML, or do some manipulations on the data while keeping it in a non-XML format.
<ul>
<li>Other tools already exist for a similar approach with XML data (see references at the end)</li>
</ul>
</li>
<li>Encoding/decoding or encryption/decryption of any data stream</li>
</ul>
<h1>Solution</h1>
<p>The relationship between the two classes described in this article is shown in the diagram below. To use these two classes, a developer would write a &quot;<strong>ConcreteStreamTransformer</strong>&quot; that implements abstract methods on the <strong>StreamTransformer</strong> class.</p>
<p>&nbsp;</p>
<p style="text-align: center; "><img alt="Class Diagram: Relationship between StreamTransformer, PipeStream and ConcreteStreamTransformer" class="alignnone size-full wp-image-806" height="460" src="http://www.matricis.com/wp-content/uploads/2012/01/PipeCmpStreaming-ClassDiagram.png" title="Class Diagram: Relationship between StreamTransformer, PipeStream and ConcreteStreamTransformer" width="413" /></p>
<p>&nbsp;</p>
<ul>
<li><strong>StreamTransformer</strong>: An abstract base class that decorates a Stream with transformation code. Its implementation of the Stream &quot;Read&quot; method calls our transformation code. However, it doesn&#39;t do the whole transformation in one shot. Instead, it will check how many bytes were requested by the caller, and will only call the transformation code enough times to fill the buffer with that number of bytes. It will then return the buffer to this caller, which will be able to do its own incremental processing on this buffer. <img alt="Simple transformation example with StreamTransformer" class="alignnone size-full wp-image-808" height="318" src="http://www.matricis.com/wp-content/uploads/2012/01/PipeCmpStreaming-StreamTransformer.png" title="Simple transformation example with StreamTransformer" width="578" /><br />
		In the diagram above, the transformation code is called twice to fill the buffer requested by the caller. We got lucky in this case, because we filled exactly the right number of bytes, we don&#39;t have any leftover bytes that didn&#39;t fit in the buffer. To avoid the complexity of managing these leftover bytes, I introduced a second class as an intermediary between the transformation and the output buffer, the <strong>PipeStream </strong>(see below).</li>
</ul>
<ul>
<li><strong>PipeStream</strong>: An intermediary buffer to which the concrete StreamTransformer will write, and which will be consumed as BizTalk (or the next pipeline component in the pipeline) reads from it. Here, &quot;consumed&quot; means that once data is read from this stream, it is removed from memory. This allows working with the same convenience as a MemoryStream to manage a variable size buffer, but without keeping everything in memory (and without swapping to disk as a VirtualStream would do). This pipe allows the transformation code to do a transformation that generates more bytes than was requested by the caller. The caller will only get the number of bytes it requested, and it will get the remaining bytes in later calls.<br />
		<img alt="Simple Transformation example, with the help of PipeStream" class="alignnone size-full wp-image-809" height="384" src="http://www.matricis.com/wp-content/uploads/2012/01/PipeCmpStreaming-StreamTransformerWithPipeStream.png" title="Simple Transformation example, with the help of PipeStream" width="578" /><br />
		In this diagram, we have leftover bytes after each transformation. For the transformation code&#39;s point of view, it simply writes <strong>all</strong> the bytes (including the leftovers) to the PipeStream. Then, the PipeStream will return only the correct number of bytes, and keep the remaining ones for the next call to the transformation code. So we have the input string &quot;testing&quot; transformed and returned in 3 steps, as &quot;TES&quot; + &quot;TIN&quot; + &quot;G&quot;. This way, BizTalk can start writing &quot;TES&quot; to the send port while waiting for the reception of &quot;tin&quot; and its transformation to &quot;TIN&quot;. This reduces latency and avoids keeping the whole &quot;TESTING&quot; string in memory. Obviously, this is a simplified example, there&#39;s not much gain in splitting such a small string. In a real solution, we would have larger buffers, for example to process data in blocks of 1024 characters.</li>
</ul>
<p>To write streaming transformations with these classes, all we have to do is write a &quot;stream decorator&quot; (the <strong>ConcreteStreamTransformer</strong>) that inherits from the StreamTransformer class and implements its abstract method.</p>
<h1>Examples</h1>
<p>A simple example would be a transformer that inserts a delimiter at each 1000 characters, so that the file is split into evenly sized &quot;blocks&quot;.</p>
</p>
<pre class="brush:csharp;">public class BlockSplittingStreamTransformer : StreamTransformer
{

	private byte[] blockDelimiter;

	private int blockSize;

	private bool wroteFirstBlock = false;

	public BlockSplittingStreamTransformer(Stream inputStream,

	int blockSize, byte[] blockDelimiter)

	: base(inputStream)

	{

		this.blockSize = blockSize;

		this.blockDelimiter = blockDelimiter;

	}

	protected override bool PartialReadAndTransformInput()

	{

		int bytesToRead = blockSize;

		byte[] inputBuffer = new byte[bytesToRead];

		int nBytesRead = InputStream.Read(inputBuffer, 0, bytesToRead);

		if (nBytesRead &lt; 0)

		{

			if (wroteFirstBlock)

				OutputStream.Write(blockDelimiter, 0, blockDelimiter.Length);

			OutputStream.Write(inputBuffer, 0, nBytesRead);

			wroteFirstBlock = true;

			return true;

		}

		else

		{

			return false; // no more data to transform in the input stream

		}

	}

}
</pre>
<p>To use this stream in a pipeline component:</p>
<pre class="brush:csharp;">	private const int BLOCK_SIZE = 5;

	private readonly byte[] BLOCK_DELIMITER = new byte[] { (byte)&#39;r&#39;, (byte)&#39;n&#39; };

	public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)

	{

		Stream originalStream = pInMsg.BodyPart.GetOriginalDataStream();

		StreamTransformer transformer =

		new BlockSplittingStreamTransformer(

			originalStream, BLOCK_SIZE, BLOCK_DELIMITER);

		pInMsg.BodyPart.Data = transformer;

		pContext.ResourceTracker.AddResource(transformer);

		return pInMsg;

	}
</pre>
<p>Here, the transformation is not done by the pipeline component itself. Instead, the pipeline component returns our StreamTransformer and allow BizTalk (or the next pipeline component in the sequence) to incrementally and transparently call the transformation code.</p>
<p>For a more interesting example, we could have a flat file that&#39;s too complex to be parsed by BizTalk&#39;s flat file features. For example, a weird format that uses:</p>
<ul>
<li>a different child delimiter between each field</li>
<li>allows different delimiters between some fields</li>
<li>allows different &quot;tag identifiers&quot; for the same type of data</li>
</ul>
<div style="width:500px">
<pre style="border: 1px solid black" width="500px">HDR153/20120127:20120130
ITEM9423%10~153.17
LINE9425|20~23.20
</pre>
<p align="center">Figure 1 Sample complex flat file</p>
</div>
<p>This format combines various problematic cases from real-world formats, such as HL7, into one example. Interpreting such a file would be complex with a flat file schema, but it would be simple with regular expressions. We could make a StreamTransformer that applies the regular expressions on the input stream.</p>
<pre class="brush:csharp;">	public class RegexStreamTransformer : StreamTransformer

	{

	private StreamReader inputReader;

	private XmlWriter outputXmlWriter;

	public RegexStreamTransformer(Stream inputStream) : base(inputStream)

	{

		inputReader = new StreamReader(InputStream, true);

		this.outputXmlWriter = XmlTextWriter.Create(base.OutputStream);

	}

	// Tag Identifier: HDR

	// First delimiter is &quot;/&quot;, second delimiter is &quot;$&quot;;

	private Regex headerPattern = new Regex(

		@&quot;^HDR&quot; +

		@&quot;(?&lt;orderid&gt;;[0-9]+)&quot; +

		@&quot;/&quot;; +

		@&quot;(?&lt;orderdate&gt;[0-9]+)&quot; +

		@&quot;:&quot; +

		@&quot;(?&lt;deliverydate&gt;[0-9]+)$&quot;;

	);

	private Regex orderItemPattern = new Regex(

		// Tag Identifier: Either ITEM or LINE

		@&quot;^(ITEM|LINE)&quot; +

		@&quot;(?&lt;itemid&gt;[0-9]+)&quot; +

		// Delimiter: either % or |

		@&quot;[%|]&quot; +

		@&quot;(?&lt;quantity&gt;[0-9]+)&quot; +

		// Delimiter: ~

		@&quot;~&quot; +

		@&quot;(?&lt;unitprice&gt;[0-9]+.[0-9]+)$&quot;

	);

	private bool wroteXmlRoot = false;

	protected override bool PartialReadAndTransformInput()

	{

		if (!wroteXmlRoot)

		{

			// first write the XML root element before doing any transformation

			outputXmlWriter.WriteStartElement(&quot;Order&quot;, &quot;http://namespace&quot;);

			wroteXmlRoot = true;

			return true; // will continue with the transformation next time the method is called

		}

		string line = inputReader.ReadLine();

		if (line != null)

		{

			var hdrMatch = headerPattern.Match(line);

			if (hdrMatch.Success)

			{

				outputXmlWriter.WriteStartElement(&quot;Header&quot;, &quot;http://namespace&quot;);

				outputXmlWriter.WriteAttributeString(&quot;orderId&quot;, hdrMatch.Groups["orderId"].Value);

				outputXmlWriter.WriteAttributeString(&quot;orderDate&quot;, hdrMatch.Groups["orderDate"].Value);

				outputXmlWriter.WriteAttributeString(&quot;deliveryDate&quot;, hdrMatch.Groups["deliveryDate"].Value);

				outputXmlWriter.WriteEndElement();

			}

			else

			{

				var orderItemMatch = orderItemPattern.Match(line);

				if (orderItemMatch.Success)

				{

					outputXmlWriter.WriteStartElement(&quot;Item&quot;, &quot;http://namespace&quot;);

					outputXmlWriter.WriteAttributeString(&quot;itemId&quot;, orderItemMatch.Groups["itemId"].Value);

					outputXmlWriter.WriteAttributeString(&quot;quantity&quot;, itemMatch.Groups["quantity"].Value);

					outputXmlWriter.WriteAttributeString(&quot;unitPrice&quot;, itemMatch.Groups["unitPrice"].Value);

					outputXmlWriter.WriteEndElement();

				}

			}

			return true; // we may still have more data to transform, will continue on next call

		}

		else

		{

			outputXmlWriter.WriteEndElement(); // close the root element

			// ensure any remaining bytes in the buffer are visible to the base class (StreamTransformer)

			outputXmlWriter.Flush();

			return false; // no more data to transform

		}

	}

}
</pre>
<p>The code to use this stream in a pipeline component is very similar to the previous example (it only instantiates a different StreamTransformer implementation):</p>
<pre class="brush:csharp;">	public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)

	{

		Stream originalStream = pInMsg.BodyPart.GetOriginalDataStream();

		StreamTransformer transformer = new RegexStreamTransformer(originalStream);

		pInMsg.BodyPart.Data = transformer;

		pContext.ResourceTracker.AddResource(transformer);

		return pInMsg;

	}
</pre>
<h1>Conclusion</h1>
<p>In this article, we&#39;ve seen how to use two classes that encapsulate the complexity of implementing streaming pipeline components. This technique is especially useful in contexts where we have non-XML data to transform. For XML data, other classes already exist to help achieve a similar approach (see references below).</p>
<p>These classes can be used in a variety of contexts. The context described in this article was BizTalk Send or Receive pipelines. But in fact, the classes don&#39;t have a dependency on BizTalk, only on plain .Net streams. This means they could also be used anywhere where .Net streams can be used.</p>
<p>Implementing pipeline components with this approach has several benefits:</p>
<ul>
<li>By doing small incremental transformations, the pipeline component uses less memory.</li>
<li>
<p>It also avoids large spikes of CPU usage when a large message is processed all at once, because it distributes CPU usage more evenly in time, allowing better parallelization.</p>
</li>
<li>
<p>It also reduces latency by allowing partial data to be processed as it becomes available, instead of waiting for the whole data.</p>
</li>
<li>
<p>Finally, the fact that it&#39;s transparent to callers means that we can use this pattern in any context where .Net Streams can be used (not only in BizTalk pipeline components)</p>
</li>
</ul>
<p>Note that another frequently used solution to minimize the use of memory in BizTalk pipeline components is&nbsp; to use a VirtualStream, which swaps its buffer to disk when it gets too large. Like the approach described in this article, it allows reducing the use of memory. However, it lacks the other advantages listed above. In fact, it also increases (instead of decreasing) latency because it has to work with disk I/O, which is slower than memory.</p>
<h1>Applies to</h1>
<p>All BizTalk versions from 2004 to 2010.</p>
<h1>Downloads</h1>
<p>The source code for the StreamTransformer and PipeStream classes described in this article, and the associated examples, are available <a href="http://www.matricis.com/wp-content/uploads/2012/01/Matricis.BTS_.PipeCmp.Tools_.Streaming.zip">here</a>.<br />
	<span class="disclaimer" style="font-variant: small-caps; font-size: 1.1em">All content provided on this blog is for informational purposes only. The owner of this blog makes no representations as to the accuracy or completeness of any information on this site or found by following any link on this site. The owner will not be liable for any errors or omissions in this information nor for the availability of this information. The owner will not be liable for any losses, injuries, or damages from the display or use of this information.</span></p>
<h1><a name="PipeCmpStreamingReferences"></a>Other useful references</h1>
<ul>
<li>Better options for implementing a streaming approach with XML input and outputs (instead of non-XML data as shown in this article):
<ul>
<li><a href="http://blogs.objectsharp.com/blogs/nbarden/archive/2008/04/24/developing-streaming-pipeline-components-part-4.aspx">Developing Streaming Pipeline Components &#8211; Part 4 &#8211; Introducing the XmlTranslatorStream</a></li>
<li><a href="http://bloggingabout.net/blogs/wellink/archive/2006/03/03/11207.aspx">Great functionality for every BizTalk developer (XPathMutatorStream)</a></li>
</ul>
</li>
<li>
<p><a href="http://msdn.microsoft.com/en-us/library/ee377071(v=bts.10).aspx">Best practices for optimizing performance of BizTalk Server pipelines</a></p>
</li>
<li><a href="http://blogs.objectsharp.com/blogs/nbarden/archive/2008/04/14/developing-streaming-pipeline-components-part-1.aspx">Developing Streaming Pipeline Components &#8211; Parts 1 to 5</a></li>
<li><a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=20375">Developing a Streaming Pipeline Component for BizTalk Server</a> The paper that first described the approach used in this article. This article provides tools to simplify the implementation of this approach.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://matricis.com/biztalk/tools-to-simply-streaming-pipeline-components-in-biztalk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
