Ladění SharePoint auto-hosted apps – The breakpoint will not currently be hit. No symbols have been loaded for this document

Pro ladění projektu na šabloně SharePoint 2013 auto-hosted je nutné vždy v solution projektu Visual Studia nastavit více projektů pro spuštění, jinak se VS nepodaří chytit správný proces a hlásí chybu chybějících symbolů “The breakpoint will not currently be hit. No symbols have been loaded for this document”

 

  • pravý klik na solution/řešení projektu
  • Set StartUp Projects
  • Multiple startup projects
  • u SP projektu i u projektu webové části nastavte Action na hodnotu Start

 

Ztracené 2 hodiny hledání problému s PDB  Obličej s očima v sloup

In Place upgrade Dynamics CRM 2011 na 2013 (on premise)

Provedl jsem zkušební upgrade Microsoft Dynamics CRM z verze 2011 na 2013 na stejném serveru, tedy bez instalace čistého a přesunu všech komponent a databází na nový, vše proběhlo překvapivě hladce.

Doporučuji se nejprve prohlédnou implementační příručku, zejména sekci podporovaného HW/SW + nově nepodporované funkce:

[more]

http://www.microsoft.com/en-us/download/details.aspx?id=40322

 

Postup:

  1. Instalace všech aktualizací CRM 2011, tedy minimálně rollup 15
  2. SNAP SHOT CRM serveru i DB serveru!!!
  3. Odinstalování CRM 2011 Reporting Extensions
  4. Odinstalování CRM 2011 Report Authoring Extensions
  5. Připojit instalační ISO CRM 2013
  6. Spustit splash.exe –> instalaci CRM Serveru 2013
  7. Zkontrolovat všechny dostupné aktualizace instalačního souboru (nic mi nenašlo)
  8. Po zadání Product Key je zobrazen dialog výběru organizace k upgrade (upgrade je možné provést dodatečně, pokud máte více CRM organizací, stejně můžete při instalaci vybrat pouze jednu):
    image
  9. Ponechal jsem NONE, všechny organizace tedy převedu až po instalaci
  10. Všechny AD účty jsem ponechal bez změn
  11. Adresu email routeru si instalační setup nepamatuje, vyplnil jsem znovu
  12. Poslední kontrola proběhla bez problémů:
    SNAGHTML4c8fbf3
  13. Next –> Next –> upgrade běží….
  14. 5 minut, výsledek OK:
    image
  15. Restart serveru – jinak neprojde instalace reporting add-onů
  16. Následně zpět nainstalovat Report Authoring Extension a Reporting Extensions (postup je identický s 2011, nenarazil jsem na žádný problém)
  17. Znovu nainstalovat Email Router – po spuštění instalace nabídne upgrade, opět pouze Next –> Next
  18. Nainstalovat language pack
  19. Spusťte CRM Deployment Manager
  20. Vyberte organizaci a v navigačním panelu Actions spusťte Upgrade organization
  21. Opět kontrola, opět OK:
    image
  22. Next a opět běží upgrade (dlouho, cca 20 minut v závislosti na velikosti organizace) – to stejné pro všechny organizace
    image
  23. HOTOVO!
    image

Hotovo je samozřejmě jenom z pohledu samotného upgrade procesu, nyní ještě spousta práce s kontrolou, zda vše funguje jako dříve Obličej s očima v sloup

Office 365: Vypnutí povinné změny hesla pro všechny uživatele (vypršení hesla)

Nastavení nelze provést pomocí webového UI, je nutné provést aktualizaci PoweShellem.

  • Spusťte PowerShell pro O365 (Microsoft Online Services Modul for Windows PowerShell), pokud nemáte nainstalovaný, ke stáhnutí zde.
  • Připojte se ke své organizaci:
    Connect-MsolService
    image
  • Vypnutí pro všechny existující uživatele proveďte jednoduchým příkazem:
    Get-MsolUser | Set-MsolUser -PasswordNeverExpires $True
  • Pokud chcete pouze pro jednoho uživatele:
    Set-MsolUser -UserPrincipalName <username> -PasswordNeverExpires $True

Blog přesunut do Azure

Termín předplacení klasického hostingu se blížil konci, rozhodl jsem se proto přesunout svůj malý blog do Azure. Přemýšlel jsem nad tím už delší dobu, ale za celou dobu jsem nenašel žádné rozumné důvody proč to udělat – a v podstatě ani teď nemám. Stávající hosting mi vyhovoval, respektive jsem měl jiné měřítko, nechtěl jsem nic konfigurovat a starat se o to, všechno fungovalo léta a to byla moje spokojenost.

 

Nakonec jsem se rozhoupal:

 

  • přesun mi trval asi 3 hodiny, včetně dat
  • nejvíce mi trvalo přijít na některé ověřovací kroky (doména v Office365, credentials k FTP)
  • všechno jsem dělal ručně, žádné wizady nebo aplikační market na Azure
  • zůstal jsem u BlogEngine.NET
  • v podstatě velice jednoduché

 

Jediné co mám pořád s otazníkem je, kolik celá ta sranda bude měsíčně stát….

  

 

Překlad odkazů dle AAM – SharePoint

SharePoint automaticky překládá všechny odkazy dle aktuální zjištěné URL zóny z HttpRequestu, je jedno zda máte odkazy přímo ve webpart stránce, ve sloupci typu Hypertextový odkaz, případně přímo v richtextu, SharePoint se vždy při renderingu podívá, zda odkaz není definován v AAM a pokud ano, automaticky ho přeloží na tvar přístupný aktuálně přihlášenému uživateli. Je to funkce logická a žádaná, neboť je jedno, zda vložíte do textu odkaz z intranetové či extranetové zóny (url adresy SP portálu), všichni uživatelé budou mít odkazovaný obsah dostupný vždy.
Stejné chování je potřeba přenést i do vlastně vyvinutých funkcí, webpart, aplikačních stránek – protože tam to SharePoint sám o sobě neumí. Převod je sám o sobě velice jednoduchý, základem je objekt SPSite, který je ale nutné buď převzít z kontextu SPContext.Current.Site nebo ho inicializovat pomocí aktuální Url adresy HttpRequestu – tedy tak, aby došlo k inicializaci objektu SPSite ve správné zóně (SPUrlZone), nelze tedy tento objekt inicializovat pomocí GUID, kde se informace o zóně ztratí.
Pro překlad odkazu mám triviální rozšíření objektu SPSite:
 
public static string TranslateUrlByAAM(this SPSite site, string url) 
{ 
    if (site == null) 
        throw new ArgumentNullException("site"); 
    if (string.IsNullOrEmpty(url)) 
        return url;

    Uri originalUri = new Uri(url); 
    Uri translateUri = SPFarm.Local.AlternateUrlCollections 
        .RebaseUriWithAlternateUri(originalUri, site.Zone); 
    if (translateUri == null) 
        return url; 
    return translateUri.ToString(); 
}

 

Analogicky regex pro replace url odkazů v html textu.

Optimalizace paměti SharePointu 2013

Provozovat SharePoint 2013 na jednom stroji v defaultní konfiguraci je téměř nemožné, minimálně na stroji s 12GB operační paměti je to nepoužitelné. Jasně, pro produkci je to nesmysl a dle Microsoftu nesprávná konfigurace HW (jenže v ČR to tak veselé není, hlavně díky ceně licencí – dle mého odhadu, 60% zákazníků používá single server, u zákazníků s Foundation je to 99.99%). Můj konkrétní problém je však samozřejmě na vývojovém serveru, kde to nechci provozovat na x strojích, ale chci to mít vše all-in-one, aby se to dalo snadno zálohovat, provádět snapshoty atd.

[more]

SharePoint 2013 nepřináší z mého pohledu nic závratně nového, proč tedy spotřebovává neskutečné množství operační paměti? Protože přeci obsahuje nový fulltextový engine, který funguje téměř realtime, začíná vracet i relevantní data, ale sám o sobě spotřebuje kompletně celý server Eye rolling smile Naštěstí to lze lehce konfigurovat, není nutné to úplně vypnout, je možné upravit spotřebu paměti.

Úplné vypnutí search serveru, byť i na vývojovém serveru, nedoporučuji, search server je totiž mocný tester, leckdy lepší než ten skutečný váš kolega. Proč? Jednoduše zjistíte, že některé stránky, webparty či custom actions se renderují příliš dlouho, že někde přeleze treashold (search neběží pod adminem, který má threshold vypnutý), uvidite chyby kontextu a podobně.

A teď k tomu search enginu, i po pár minutách se aktivují nenažrané procesy “Microsoft Office 2013 component”, což není nic jiného než xkrát spuštěná služba “NodeRunner.exe”.

taskmanager-search

Detail procesu:

taskmanager-noderunner

Po několika hodinách provozu není problém, aby tyto procesy spotřebovali 10GB operační paměti.

Nyní jak to změnit, doporučuji změnit pouze na vývojovém prostředí (ale na produkci to bude fungovat samozřejmě taky):

  1. spusťte SharePoint PowerShell a proveďte příkaz:
    Set-SPEnterpriseSearchService –PerformanceLevel Reduced
  2. pomocí poznámkového bloku najděte a otevřete soubor:
    C:\Program Files\Microsoft Office Servers\15.0\Search\Runtime\1.0\noderunner.exe.config
  3. najděte element nodeRunnerSettings a memoryLimitMegabytes, nastavte hodnotu na 250 – což je limit 250 MB na jeden proces NodeRunner.exe
    <nodeRunnerSettings memoryLimitMegabytes=”250” />
    noderunner250
  4. Uložte změny, restartujte server

 

Budu rád za jakýkoliv feedback či případné jiné nápady, mě to pomohlo a na stroji je konečně možné i vyvíjet.