<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Cloud Application Development</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/bartonmathis/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/bartonmathis/feed.xml</link>
    <description>Modern development on and with the Microsoft stack</description>
    <lastBuildDate>Tue, 16 Apr 2019 04:46:04 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Application Insights Performance Profiler</title>
      <link>https://docs.microsoft.com/archive/blogs/bartonmathis/application-insights-performance-profiler</link>
      <pubDate>Mon, 03 Jul 2017 10:20:07 GMT</pubDate>
      <dc:creator><![CDATA[yaaad]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/bartonmathis/?p=86</guid>
      <description><![CDATA[I've been asked recently about performance profilers for various apps, and so I took another look at...]]></description>
      <content:encoded><![CDATA[I've been asked recently about performance profilers for various apps, and so I took another look at App Insights to see what's new/different/interesting in that space.

Luckily, I ran across this: <a href="https://docs.microsoft.com/en-us/azure/application-insights/app-insights-profiler">https://docs.microsoft.com/en-us/azure/application-insights/app-insights-profiler</a>, which is super-awesome, and seem to work for ASP.NET Core (aspnetcore) apps as well!  Here's a screenshot of the vanilla aspnetcore MVC app, hosted in a basic web app, after being thrashed by 100k hits to the "home" and "about" pages.

<a href="https://msdnshared.blob.core.windows.net/media/2017/06/ApplicationInsightsPerformanceProfiler.png"><img width="300" height="180" class="alignnone size-medium wp-image-95" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/06/ApplicationInsightsPerformanceProfiler-300x180.png" /></a>

&nbsp;

Check It out!]]></content:encoded>
    </item>
    <item>
      <title>Microservices == Microdatabases</title>
      <link>https://docs.microsoft.com/archive/blogs/bartonmathis/microservices-microdatabases</link>
      <pubDate>Thu, 29 Jun 2017 00:54:12 GMT</pubDate>
      <dc:creator><![CDATA[yaaad]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/bartonmathis/?p=105</guid>
      <description><![CDATA[I've been playing in the microservices conversation for quite a while now, and just wanted to...]]></description>
      <content:encoded><![CDATA[I've been playing in the microservices conversation for quite a while now, and just wanted to callout a really nice codebase/walkthrough at <a href="https://github.com/dotnet-architecture/eShopOnContainers">https://github.com/dotnet-architecture/eShopOnContainers</a>

While we're on the topic, the first question I often hear is "what is a microservice?" or "what is the difference between a microservice and SOA?" Seeing as how microservices <a href="https://en.wikipedia.org/wiki/Microservices">doesn't even have an actual definition</a>, it's more than a fair question.  If someone is familiar with SOA, then my favorite place to begin discussions is with this image, and to point out something that most folks don't immediately apprehend.

<strong>It is very common (and usually required) to split and duplicate data across the data stores for each microservice.</strong>

This blew my mind when I first considered it, but it makes perfect sense, and is a completely reasonable (and appropriate!) thing to do.  In the image below, we'll want to service/release/version/enhance each of the microservices independently.  Let's take <em>Ordering</em> for example. If we don't store enough <i>I</i><em>dentity</em> information in the <em>Ordering</em> service to allow for folks to create orders <em>while the Identity service is being rev'd</em>, we've still got a horizontal dependency that makes those 2 services monolithic in practice.

<img width="1830" height="1078" class="alignnone size-medium" src="https://raw.githubusercontent.com/dotnet-architecture/eShopOnContainers/master/img/eShopOnContainers_Architecture_Diagram.png" />

Microservices == Microdatabases + duplication :)]]></content:encoded>
    </item>
    <item>
      <title>Replace ConnectionString values using transformations in Team Services</title>
      <link>https://docs.microsoft.com/archive/blogs/bartonmathis/replace-connectionstring-values-using-transformations-in-team-services</link>
      <pubDate>Wed, 28 Jun 2017 22:15:49 GMT</pubDate>
      <dc:creator><![CDATA[yaaad]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/bartonmathis/?p=36</guid>
      <description><![CDATA[First off, check out this great overview...]]></description>
      <content:encoded><![CDATA[First off, check out this great overview <a href="https://blogs.msdn.microsoft.com/devops/2017/04/05/managing-configuration-app-settings-for-multiple-environments-in-your-cd-pipeline/">https://blogs.msdn.microsoft.com/devops/2017/04/05/managing-configuration-app-settings-for-multiple-environments-in-your-cd-pipeline/</a>

And be aware of how stinky-easy this is when deploying to Azure web sites.  Note: Creation of variables in Team Services, and slot settings in Azure are typically done by an Operations or Infrastructure/Deployment team, *not* by developers :).
<ul>
 	<li>Managed via Variables in Team Services: <a href="https://www.visualstudio.com/en-us/docs/build/apps/cd/deploy-webdeploy-webapps#configure-the-environment">https://www.visualstudio.com/en-us/docs/build/apps/cd/deploy-webdeploy-webapps#configure-the-environment</a></li>
 	<li>Managed via Azure slot settings: <a href="https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-staged-publishing#configuration-for-deployment-slots">https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-staged-publishing#configuration-for-deployment-slots</a></li>
</ul>
And also for IIS apps <a href="https://www.visualstudio.com/en-us/docs/build/apps/cd/deploy-webdeploy-iis-deploygroups#environment-specific-configuration">https://www.visualstudio.com/en-us/docs/build/apps/cd/deploy-webdeploy-iis-deploygroups#environment-specific-configuration</a>

&nbsp;

But what about other app types that don't have tasks that incorporate transforms?  It's still easy, by using <a href="https://marketplace.visualstudio.com/items?itemName=colinsalmcorner.colinsalmcorner-buildtasks&amp;targetId=7dacf843-75a4-49e4-9159-8238dcb906a6">Colin's ALM Build and Release Tools task</a>. Specifically, the <a href="https://github.com/colindembovsky/cols-agent-tasks/tree/master/Tasks/ReplaceTokens">Replace Tokens</a> task.

&nbsp;

Here's a quick walkthrough, using a connection string value as an example.
<ol>
 	<li>Create a variable in each environment with the name/value pair for the connection string. The "Name" must match the name of our connection string in web.config.
<a href="https://msdnshared.blob.core.windows.net/media/2017/06/AddEnvironmentVariable.png"><img width="300" height="178" class="alignnone size-medium wp-image-56" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/06/AddEnvironmentVariable-300x178.png" /></a></li>
 	<li>Add the "Replace Tokens" task to the release. This will search all files with a .config extension and perform a match against any "names" that match an environment variable.
<a href="https://msdnshared.blob.core.windows.net/media/2017/06/AddTransformTask.png"><img width="300" height="98" class="alignnone size-medium wp-image-65" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/06/AddTransformTask-300x98.png" /></a></li>
 	<li>In order to retain the ability to do easy debugging locally, keep the appropriate connection string setting in the web.config.
<a href="https://msdnshared.blob.core.windows.net/media/2017/06/SetupLocalConfigForDebugging.png"><img width="300" height="35" class="alignnone size-medium wp-image-75" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/06/SetupLocalConfigForDebugging-300x35.png" /></a></li>
 	<li>Create "Debug" and "Release" configs that will tokenize the connection string when it is built by VSTS. In our case, it will replace the actual connectionstring value with "__DefaultConnectionString__" so that the replace tokens task from #2 will be able to find/replace it.
<a href="https://msdnshared.blob.core.windows.net/media/2017/06/SetupReleaseConfig.png"><img width="300" height="214" class="alignnone size-medium wp-image-76" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/06/SetupReleaseConfig-300x214.png" /></a></li>
</ol>
That's it!  Debug locally using a local database (or whatever is appropriate), and have releases flow into the release pipeline where all other connection strings will be populated based on the environment in Team Services, or the slot setting in Azure.

Easy!

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>TFVC to Git - How do I???</title>
      <link>https://docs.microsoft.com/archive/blogs/bartonmathis/25-2</link>
      <pubDate>Wed, 28 Jun 2017 21:19:43 GMT</pubDate>
      <dc:creator><![CDATA[yaaad]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/bartonmathis/?p=25</guid>
      <description><![CDATA[A great primer on Git interactions for those of us that have been in TFVC for sooo long...]]></description>
      <content:encoded><![CDATA[A great primer on Git interactions for those of us that have been in TFVC for sooo long :).

&nbsp;

<a href="https://www.visualstudio.com/en-us/articles/mapping-my-tfvc-actions-to-git">https://www.visualstudio.com/en-us/articles/mapping-my-tfvc-actions-to-git</a>]]></content:encoded>
    </item>
  </channel>
</rss>