SharePoint 2013: Distributed Cache aktuell halten

Der Distributed Cache Dienst (AppFabric) spielt in SharePoint 2013 eine sehr wichtige Rolle und entgegen früherer Aussagen von Microsoft, er würde zusammen mit SharePoint aktuell gehalten, ist man selbst für die Aktualität verantwortlich.

Ich beziehe mich hier auf diesen Beitrag von Wictor Wilén. Er beschreibt dort sehr ausführlich die genauen Schritte und auch warum etwas wie gemacht werden sollte. Als persönliche Referenz fasse ich hier nur in aller Kürze die notwendigen Schritte zusammen. Dabei beziehe ich mich auf das derzeit aktuelle CU5, das hier heruntergeladen werden kann.

Schritt 1: Distributed Cache anhalten. Das geht in der SharePoint Management Shell so:

Stop-SPDistributedCacheServiceInstance -Graceful

Schritt2: Das Update installieren. Dazu einfach die heruntergeladene Datei durch Doppelklick starten.

Schritt 3: Eine kleine Anpassung in der Konfigurationsdatei. Dazu Notepad (oder einen anderen Editor) als Administrator starten und diese Datei öffnen:

Program Files/AppFabric 1.1 for Windows Server/DistributedCacheService.exe.config

In diese Datei fügt man irgendwo innerhalb von <configuration> … </configuration> folgendes ein:

<appSettings>
  <add key="backgroundGC" value="true" />
</appSettings>

Schritt 4: Distributed Cache wieder starten. Das geht ebenfalls in der SharePoint Management Shell:

$svc = Get-SPServiceInstance | ? { $_.TypeName -eq "Distributed Cache" -and $_.Server.Name -eq $env:computername }
$svc.Provision()

Diese Schritte müssen nacheinander auf allen Servern der SharePoint Farm ausgeführt werden, auf denen der Distributed Cache läuft.

Eine Assembly in den GAC bringen beim Windows Server

Da ich mich immer wieder darüber ärgere, daß es seit einigen Versionen von Windows Server nicht mehr so einfach ist, eine Assembly (.dll) in den GAC zu bringen, hier eine kurze Notiz wie man das mit PowerShell erledigen kann. Früher ging das mal ganz einfach per Drag&Drop im Windows Explorer…

Eine Assembly dem GAC hinzufügen:

[System.Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices")
$publ = New-Object System.EnterpriseServices.Internal.Publish
$publ.GacInstall("C:\temp\MyAssembly.dll")

Wenn die Assembly im IIS benütigt wird, z.B. weil man es mit SharePoint zu tun hat, braucht es noch einen iisreset.

Wenn man eine Assembly wieder aus dem GAC entfernen möchte:

[System.Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices")
$publ = New-Object System.EnterpriseServices.Internal.Publish
$publ.GacRemove("C:\temp\MyAssembly.dll")

Zum Entfernen braucht es also tatsächlich die Assembly im Dateisystem. Wenn man sie dort nicht hat, kann man sie mit dieser Zeile aus dem GAC kopieren:

dir C:\Windows\Assembly –Recurse –Filter "MyAssembly.dll" | foreach { copy $_.FullName C:\temp }