Slides and Demos from SharePoint Saturday Detroit 2016

Reading Time: 1 minutes

   After a few years away I was able to present at SharePoint Saturday Detroit 2016.  A big thank you to all of the attendees, sponsors, organizers, and other speakers.  Below are my slides and a link to a GitHub repo with the demo projects that I used for the final demo.  This includes the Azure SQL DB project, API app, and Web App.  If you have any feedback or questions feel free to leave a comment below.

GitHub link to demo project files

https://github.com/BrianTJackett/BTJ.PowerApps.AzureDBSample

 

      -Frog Out

Upcoming Speaking Events September 2016

Reading Time: 2 minutes

   After many months away from blogging and speaking (baby #2 was born recently) I’m speaking at a few conferences in the coming months.  If you are attending any of these conferences please stop by and say hi.  Looking forward to returning to each of these events.  Here are the sessions and abstracts.

 

Sessions

SharePoint Saturday Detroit (Sept 17th, 2016)

Title: PowerApps and Microsoft Flow for the SharePoint Developer

Abstract: PowerApps and Microsoft Flow are enterprise services (currently in preview) that allows power users and developers to build scalable applications that connect with numerous consumer and enterprise sources using PowerPoint and Excel-like tools. In this session we will overview the integration points for PowerApps and Microsoft Flow with various sources such as OneDrive, Twitter, Azure, and more. We will also talk about the developer story for integrating with custom APIs and on-prem data sources such as SQL Server and SharePoint. Lastly we will demo a number of scenarios to show how easily you can create and consume apps across Windows, iOS, Android, and web.

 

DogFood Con (Oct 5-6, 2016)

Title: PowerApps and Microsoft Flow Intro for Developers

Abstract: PowerApps and Microsoft Flow are enterprise services (currently in preview) that allows power users and developers to build scalable applications that connect with numerous consumer and enterprise sources using PowerPoint and Excel-like tools.  In this session we will overview the integration points for PowerApps and Microsoft Flow with various sources such as OneDrive, Twitter, Azure, and more.  We will also talk about the developer story for integrating with custom APIs and on-prem data sources such as SQL Server and SharePoint.  Lastly we will demo a number of scenarios to show how easily you can create and consume apps across Windows, iOS, Android, and web.

 

Title: Running Your Dev / Test VMs in Azure for Cheap

Abstract: With an MSDN subscription you can run your dev / test environment in Azure IaaS for less than the cost of a cup of coffee each day. In this session we will overview the basics of Azure IaaS (Infrastructure as a Service), the pieces you will use to be successful deploying SharePoint in Azure (including the new Azure Resource Manager templates), and how to use resources as efficiently as possible to reduce your costs and boost your farm performance. This session is targeted to SharePoint developers and administrators. Prior knowledge of Azure is helpful but not a requirement.

 

SharePoint Saturday Twin Cities (Oct 29, 2016)

Title: PowerApps and Microsoft Flow for Developers

Abstract: PowerApps and Microsoft Flow are enterprise services (currently in preview) that allows power users and developers to build scalable applications that connect with numerous consumer and enterprise sources using PowerPoint and Excel-like tools.  In this session we will overview the integration points for PowerApps and Microsoft Flow with various sources such as OneDrive, Twitter, Azure, and more.  We will also talk about the developer story for integrating with custom APIs and on-prem data sources such as SQL Server and SharePoint.  Lastly we will demo a number of scenarios to show how easily you can create and consume apps across Windows, iOS, Android, and web.​

 

      -Frog Out

My Blog Has Moved

Reading Time: 2 minutes

Four months ago I wrote a post about Changes Planned for My Blog.  My initial research into migrating my blog ended up needing much more manual effort migrating content and extra time fine tuning the destination platform.  Additionally the birth of our second child has changed my priorities on time and side projects recently.  Without further delay I’m happy to announce that I am migrated off of my prior GeeksWithBlogs (SubText) platform and now on to WordPress.

Some of you may be asking “but Brian you said you were looking at migrating to Orchard, what happened to that?”.  As part of my migration attempt I had to convert from SubText to WordPress and then WordPress export out to a format that Orchard could understand.  Getting all content exported (including pictures, comments, blog post metadata, etc.) was very tricky and I had to manually update some of the export / import files for it to work properly.  In the end it was taking too much time to convert everything twice.  Everything looked good enough on WordPress and the developer / plug-in support on WordPress is strong.  I do plan to blog out the tools and processes I used in the migration in case anyone else is interested in seeing how that worked.

That being said, yes I’m aware that some content is not displaying 100% the same way that it did on my prior hosting blog.  You may notice that code snippets from years ago aren’t spaced properly or embedded images aren’t showing.  The latter is actually an issue with OneDrive that I had submitted a ticket on and am getting answers on.  If you notice something is not displaying properly or other issues please leave a comment or contact me.  I’ll be fine tuning my blog over time and any and all suggestions are welcome.  Thanks and I look forward to getting back into a more regular blogging schedule the remainder of this year.

   Side note: I am doing some URL rewrite / redirection on my new blog to clean up the URLs from my old blog.  This includes striping out the “bjackett/archive” portion of the URL as it is a remnant from my old host.  If you are accessing any content on the original URL “http://geekswithblogs.net/bjackett/…” you will be redirected to the intended URL of “http://briantjackett.com/…” instead.

-Frog Out

Speaking at Central Ohio Azure User Group June 2016

Reading Time: 1 minutes

Next Monday, June 13th I am excited to be presenting at the Central Ohio Azure user group (COAzure). This will be my first time speaking at this group.  Session details are below.  Meeting is from 6:00pm-8:00pm at the Microsoft building in Columbus near Polaris mall.  Come on out and learn more about Azure VM.

 

Session

Title: Running Your Dev/Test Virtual Machines in Azure for Cheap

Abstract: With an MSDN subscription you can run your dev / test SharePoint environment in Azure IaaS for less than the cost of a cup of coffee each day. In this session we will overview the basics of Azure IaaS (Infrastructure as a Service), the pieces you will use to be successful deploying SharePoint in Azure (including the new Azure Resource Manager templates), and how to use resources as efficiently as possible to reduce your costs and boost your farm performance. This session is targeted to SharePoint developers and administrators. Prior knowledge of Azure is helpful but not a requirement.

 

 

-Frog Out

Changes Planned for Blog

Reading Time: 2 minutes

   A big thank you goes out to all of your who have at one point or another read my blog.  It has come to my attention over the course of the past few months that a few things I took for granted on my blog are no longer functioning as expected.  These include:

  • No longer receiving email notifications when comments are submitted
  • RSS feed is duplicating items multiple times after posting new content
  • Categories disappear in the navigation
  • Split search engine SEO between custom domain URL and blog hosting default URL

 

   This is not a negative against my current blog hosting provider.  They have done a great job since I started blogging back in 2009.  However it is time for me to find a new platform and update various parts of my blog.  I’m currently looking at Orchard CMS as the primary option for a new platform. I first heard about Orchard CMS from a fellow SharePoint technologist Andrew Connell who migrated his blog from Subtext to Orchard as well (see his posts on the matter here).  I am still testing out various tools and migration strategy but hoping this won’t take more than a month or two of planning and execution.  It will not be a quick and easy migration but it will be worth the time and effort.

   In the meantime you will probably notice my go quiet on blogging.  I’ve also disabled RSS feed syndication due to the duplication issue mentioned above.  I hope you’ll enjoy the re-launch when things are migrated.

 

      -Frog Out

SharePoint 2016 Configuration Change to Support AppFabric Background Garbage Collection

Reading Time: 3 minutes

!Note: This post is written as of the SharePoint 2016 Release Candidate.  Pre-release software is subject to change prior to release.  I will update this post once SharePoint 2016 hits RTM or the related information has changed!

   In this post I’ll walk through the steps to enable background garbage collection for AppFabric 1.1 which is used by  the SharePoint 2016 Distributed Cache service.  I also provide a sample PowerShell script to automate the change.  Skip down to the Solution section for specific changes and a script to automate implementing the change.

 

Background

   The change that I describe is not a new one.  It was first introduced during SharePoint 2013’s lifecycle when Microsoft AppFabric 1.1 Cumulative Update 3 (CU3) was released.  CU3 allowed for a non-blocking garbage collection to take place but in order to take advantage of this capability an administrator needed to update a Distributed Cache configuration file (described below in the Solution section).  Later Microsoft AppFabric cumulative updates also require this same change to the configuration file.

   Fast forward to SharePoint 2016 which continues to use Microsoft AppFabric 1.1 for the Distributed Cache service.  As of the release candidate (RC) SharePoint 2016 ships with Microsoft AppFabric 1.1 Cumulative Update 7.  Since this cumulative update builds upon CU3 it also requires the same configuration file change to enable background garbage collection.

 

Problem

  Depending on server configuration, hardware, workloads being run, and more factors a SharePoint farm may or may not experience any issues with the Distributed Cache service if the background garbage collection change has not been applied.  In my lab environment I simulated load (10-50 requests / sec) against the SharePoint Newsfeed.  After a few minutes I began to experience issues with Newsfeed posts not appearing and eventually the Distributed Cache service instances crashed on the two servers hosting that service.  A restart of the AppFabric service allowed the Distributed Cache to recover and function normally again.

 

Solution

   The configuration change to allow for background garbage collection in Microsoft AppFabric 1.1 is outlined in Cumulative Update 3.  An administrator who has access to the SharePoint server(s) hosting the Distributed Cache service will need to perform the following actions.

  1. Upgrade the Distributed Cache servers to the .NET Framework 4.5 (as of the publishing of this blog .Net 4.5 is no longer supported and .Net 4.5.2 will need to be installed.)
  2. Install the cumulative update package (already installed for SharePoint 2016 Release Candidate).
  3. Enable the fix by adding / updating the following setting in the DistributedCacheService.exe.config file:
    <appSettings><add key="backgroundGC" value="true"/></appSettings>
  4. Restart the AppFabric Caching service for the update to take effect.

Note: By default, the DistributedCacheService.exe.config file is located under the following directory:

”%ProgramFiles%AppFabric 1.1 for Windows Server” where %ProgramFiles% is the folder where Windows Program Files are installed.

 

   While it is possible to modify this file by hand it is preferred to automate this process especially when multiple servers need to be updated.  The below script leverages the System.Configuration.ConfigurationManager class to make the necessary changes on an individual server running the Distributed Cache service.

Note: This script must be run from each server running the Distributed Cache service.  For an automated way to run on all Distributed Cache servers in a SharePoint farm see the PowerShell snippet following this script.

 

THIS SAMPLE CODE AND ANY RELATED INFORMATION ARE PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.

 

Download link:

https://gallery.technet.microsoft.com/SharePoint-update-7816fa74

[system.reflection.assembly]::LoadWithPartialName(“System.Configuration”) | Out-Null 

# intentionally leave off the trailing “.config” as OpenExeConfiguration will auto-append that 
$configFilePath = “$env:ProgramFilesAppFabric 1.1 for Windows ServerDistributedCacheService.exe” 
$appFabricConfig = [System.Configuration.ConfigurationManager]::OpenExeConfiguration($configFilePath) 
# if backgroundGC setting does not exist add it, else check if value is “false” and change to “true” 
if($appFabricConfig.AppSettings.Settings.AllKeys -notcontains “backgroundGC”) 
{ 
    $appFabricConfig.AppSettings.Settings.Add(“backgroundGC”, “true”) 
} 
elseif ($appFabricConfig.AppSettings.Settings[“backgroundGC”].Value -eq “false”) 
{ 
    $appFabricConfig.AppSettings.Settings[“backgroundGC”].Value = “true” 
} 
# save changes to config file 
$appFabricConfig.Save() 

 

   Optionally the following snippet can be run from any machine in a SharePoint farm that has the SharePoint commandlets available.  This will identify each Distributed Cache server and remotely run the previous script to implement the Distributed Cache configuration change.

Note: Update $UpdateDistributedCacheScriptPath with the path of the above script.  Also ensure that  PowerShell remoting is enabled and the account running the script has access to the target machines.

 

$UpdateDistributedCacheScriptPath = “C:ScriptsUpdateDistributedCacheBackgroundGCSetting.ps1” 

$serversRunningDistributedCache = Get-SPServiceInstance | where typename -eq “Distributed Cache” | select server | %{$_.Server.ToString().Split(‘=’)[1]} 
foreach($server in $serversRunningDistributedCache) 
{ 
    Write-Verbose “Modifying config file on server: $server” 
    Invoke-Command -FilePath $UpdateDistributedCacheScriptPath -ComputerName $server 
    Write-Verbose “Script completed on server: $server” 
} 

 

Conclusion

   In this post I walked through the update required to enable background garbage collection in Microsoft AppFabric 1.1 Cumulative Update 3 and higher.  This configuration change is required for SharePoint 2013 or SharePoint 2016 (as of Release Candidate).  I also provided a script for automating the process of implementing this configuration change.  I’m told a future update may automatically apply this change for SharePoint 2016.  If and when that change is released I’ll update this post to reflect that change.

 

      -Frog Out