Daily Archives: 2010.05.31. 13:30

Managed Service Account vs. SQL Server

A Windows Server 2008 R2 újdonságai közül az egyik kedvencem a Managed Service Accountok és a Virtual Accountok megjelenése. Persze ez nem egy látványos újdonság, talán ezért is nem szerepel óriási betűkkel kiemelve a What’s new oldalon, pedig üzemeltetők számára igen-igen hasznos. Persze csak azoknak, akik nem minden szolgáltatás Local System felhasználóval futtatnak.

A minap SQL Server 2008 R2-t akartam telepíteni, ám csalódva kellett tapasztalnom, hogy még az R2 változat sem támogatja ezt a két új fióktípust 😦 Az SQL Server 2008-ról ez ismert volt, de most az R2-vel kapcsolatban is megerősítették a fórumban:

SQL Server 2008 and SQL Server 2008 R2 do NOT support managed service account and virtual account when running on Win7 and Win2k8 R2.

Maradt a szokásos helyi Gipsz Jakab felhasználóval történő futtatás, ami nem is zavart volna, ha a Windows Remote Desktop login képernyőjén nem virított volna feltűnően bárki számára, hogy van egy ilyen felhasználó. Onnan pedig leginkább registry matatással lehet eltűntetni az ilyen persona non gratat:

  1. Létre kell hozni a HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ Winlogon\SpecialAccounts\UserList kulcsot – nálam az utolsó 2 szint nem létezett.
  2. Ezen belül egy DWORD típusú kulcsot kell létrehozni, aminek a neve legyen az eltüntetendő felhasználó neve (pl. gjakab), az értéke pedig 0.

Továbbá azok a felhasználók is eltűnnek a Welcome Screenről, akiknek Deny log on locally jogot “adunk”, amit egyébként is ajánlatos megtenni.

Technorati-címkék: ,

Eval HtmlEncode-dal

Nagyon bosszantó tud lenni, hogy az ASP.NET-es vezérlők közül még a legalapvetőbbek sem végeznek HTML kódolást, így kénytelenek vagyunk ezt mi magunk elvégezni adatkötéskor. Az eredmény egy ismétlődő és nehezen olvasható kifejezés lesz.

Például:

  Text='<%# this.Server.HtmlEncode( Eval( "NewsTitle" ).ToString() ) %>'

A legszebb az lenne, ha az Evalt fel tudnánk váltani egy saját EncodeEval metódusra, amely belül megcsinálja a ToStringet és a HtmlEncode-ot is. Tudva, hogy az Eval belül valójában DataBinder.Eval és bevetve az extension metódusok erejét, meg is lehet csinálni:

  public static string EncodeEval( this Control control, string expression )
  {
    return HttpUtility.HtmlEncode(
       DataBinder.Eval( control.Page.GetDataItem(), expression ).ToString() );
  }

Sőt, ha kell a formázás is, akkor írhatunk belőle még egyet:

  public static string EncodeEval( this Control control, string expression, string format )
  {    return HttpUtility.HtmlEncode(
       DataBinder.Eval( control.Page.GetDataItem(),
                        expression, format ).ToString() );
  }

Így már csak ennyi kerül a markupba:

  Text='<%# this.EncodeEval( "NewsTitle" ) %>'

A dolognak egyetlen apró szépséghibája van: ez belül éppúgy reflectiont használ, mint a hagyományos Eval. Erre akar utalni az MSDN is, csak éppen nagyon félreérthetően teszi a DataBinder.Eval leírásánál:

Because this method performs late-bound evaluation, using reflection at run time, it can cause performance to noticeably slow compared to standard ASP.NET data-binding syntax. Use this method judiciously, particularly when string formatting is not required.

A nagy kérdés persze, hogy hogyan lehet elkerülni a reflectiont? Én azt szoktam csinálni, hogy megnézem, mi van az aktuális rekordban, például így:

  Text='<%# Container.DataItem %>'

ListView esetén például System.Data.DataRowView, amit megindexelhetünk oszlopnévvel:

  Text='<%# ( (System.Data.DataRowView) Container.DataItem )[ "NewsTitle" ] %>'

Ez már nem használ reflectiont, cserébe hosszú és nem is végez HTML kódolást.

Vissza a Start mezőre 🙂

A teljes implementáció letölthető innen.

Technorati-címkék: ,,