2009. április havi bejegyzések

SQL Express: Failed to generate a user instance

A minap sikerült belefutni ebbe a barátságos hibaüzenetbe Visual Studioban, miközben Local Database File elemet akartam egy SQL Expresst használó Web Site-hoz hozzáadni:

Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed.

A megoldás az alábbi mappa törlése (a kevésbé kalandvágyók persze menthetnek is előtte):

C:Users[username]AppDataLocalMicrosoftMicrosoft SQL Server DataSQLEXPRESS

Ha az SQL Expresst UserInstance=true módban futtatjuk, akkor minden egyes felhasználó esetén az első használatkor ebbe a mappába lemásolódnak a szükséges rendszer adatbázisok, miközben a fehér ember a homokórát bámulja. Mivel UserInstace módban az alkalmazás általában csak a saját adatbázisát piszkálja és nem vesz fel más adatbázisokat vagy loginokat a masterbe, ezért nem gond, ha mindentől megszabadulunk.

Reklámok

Mailto mindenestül

Sokadszorra is levonom a következtetést, hogy nem szabad a felhasználókat arra kérni, hogy e-mailben küldjék el a kért adatokat, mert a fele lemarad és úgy járunk, mint az egyszeri piarista, aki szerint a négy evangélista a következő három: Dávid és Góliát.

Ha már nem tudunk a felhasználóknak webes űrlapot adni, akkor legalább adjunk egy félig megírt e-mailt, amit csak ki kell tölteniük, például ilyet:

mailto Outlookban

Ehhez mindössze egy mailto: linkre van szükség, kellően felparaméterezve, mert hogy azt is lehet. A fenti levél akkor jött létre, mikor egy oldalon az alábbi linkre kattintottam (sortörések nélkül):

  <a href="mailto:gina@example.com; zoli@example.com
          ?cc=roby@example.com
          &bcc=andris@example.com
          &subject=Kitöltött űrlap
          &body=Küldöm a szükséges adatokat:%0A%0A
                Név: %0A
                Cím: %0A
                Preferált e-mail cím: %0A
                %0A
                Köszönettel, %0A">ide</a>

Amit érdemes észrevenni:

  • Nem csak a TO mezőt lehet előre kitölteni, hanem minden mezőt.
  • A paraméterek tetszőleges sorrendben következhetnek, az első előtt kérdőjel (?), a többi között pedig & jel kell.
  • A nagy könyv szerint a címzetteket vesszővel kell elválasztani, az Outlook nálam csak a pontosvesszővel birkózott meg.
  • A jelek szerint a magyar ékezetek kezelésével nincs gond, legalábbis Outlooknál.
  • Több soros body is írható, a sortörést a %0A jelzi, amiből ha kettőt rakunk egymás alá, akkor üres sort kapunk.
  • Mindezt persze illene URL enkódolni, de legalább a szóközök helyett %20-t írni, tapasztalataim szerint azzal sincs gondja az Outlooknak.

Persze az e-mail címet illene úgy beletenni az űrlapba, hogy lehetőleg kevés spam érkezzen rá, ezzel kapcsolatban ajánlom figyelmetekbe a reCAPTCHA Mailhide szolgáltatását.

Technorati Tags: ,,

Hitelesítés és hozzáférés szabályozás az IIS 7-ben

Az Internet Information Services 7 számos újdonságot hordoz a hitelesítés (authentication) és a hozzáférés szabályozás (authorization) területén, melyek nagyban megkönnyítik a webkiszolgálót üzemeltető rendszergazdák életét.

Illusztráció Az IUSR_gépnév felhasználót és az IIS_WPG csoportot felváltotta az IUSR felhasználó és az IIS_IUSRS csoportok. Mindkettő beépített identity lett az operációs rendszerben, így a nevük és a SID-jük állandó és a felhasználó jelszavának kezelésével sem kell foglalkoznunk. Az alkalmazáskészletekhez rendelt felhasználói fiókok futási időben automatikusan az IIS_IUSRS csoport tagjaivá válnak, így elég ennek a csoportnak jogosultságokat adnunk, nem kell a csoporttagsággal foglalkoznunk. Újdonság, hogy a jogosultságszabályozásnál az alkalmazáskészletek felhasználói fiókjaira is hivatkozhatunk az IIS APPPOOL<alkalmazáskészlet neve> formában.

A hozzáférés szabályozásban újdonság az ASP.NET ihlette URL Authorization, amely lehetővé teszi, hogy a fájlrendszerben található erőforrásoktól függetlenül, URL-ekre adjunk meg hozzáférési szabályokat. A definiált szabályok web.config állományokban tárolódnak, így nincs többé szükség a fájlokon és mappákon megadott hozzáférés-szabályozási listák (ACL-ek) nehézkes mozgatására. Az új URL Authorization modul segítségével ráadásul nem csak Windows felhasználói fiókokra adhatunk meg szabályokat, hanem – mivel a modul képes együttműködni az ASP.NET Membership és Role Providerekkel – akár Forms Authentication eredményeként előállt felhasználói fiókokra és csoportokra is.

Demó

A demóban bemutatásra kerül az új URL Authorization modul és a hozzáférés szabályozása az új IIS APPPOOL névtér segítségével.

A videó a képre kattintva megtekinthető böngészőben vagy a kép alatti linkre kattintva letölthető:

A képre kattintva megtekinthető a demó videó.

Letöltés: Hozzaferes_szabalyozas.wmv (15:29, 70.0 MB)

Első lépések

A hitelesítés működéséhez telepítenünk kell legalább egy modult az alábbiak közül: Basic Authentication, Client Certificate Mapping Authentication, Digest Authentication, IIS Client Certificate Mapping Authentication, Windows Authentication vagy az ASP.NET támogatást. Az URL Authorization szintén külön modulként telepítendő.

Jó tudni

Az ASP.NET-es és az IIS 7-es URL Authorization között sok különbség van:

ASP.NET URL Authorization

IIS 7 URL Authorization

Szabályok kiértékelése

Alsóbb szinttől a szülők felé, a szabályok megadásának sorrendjében.

Szülőtől az alsóbb szintek felé, a Deny szabályok az Allow szabályok előtt, azon belül a szabályok megadásának sorrendjében.

IIS Manager támogatás

Nincs

Authorization Rules modul

Konfigurációs szekció

system.web / authorization

system.webServer / security / authorization

Modul

System.Web.Security.UrlAuthorization

%windir%system32inetsrvurlauthz.dll

Védett tartalom

Csak managed handler (kikapcsolható a preCondition=”managedHandler” attribútummal).

Minden tartalom.

További információk

WorkItemTypeDeniedOrNotExistException

Ebbe a szép hibaüzenetbe tegnap futottunk bele, miközben Visual Studioban egy TFS work itemet akartunk megtekinteni:

Could not load type ‘Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException’ from assembly ‘Microsoft.TeamFoundation.WorkItemTracking.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a’

A probléma akkor jön elő, ha sikerül a Team Explorert a Visual Studio SP1 után telepíteni. A VS SP1 frissíti a Team Explorert is, azonban ha a Team Explorert telepítjük az SP1 után, akkor abból csak RTM verziónk lesz, ami a jelek szerint nem fér meg a VS SP1 részeivel. A helyes sorrend tehát:

  1. Visual Studio 2008
  2. Team Explorer
  3. Visual Studio 2008 SP1

A megoldás az SP1 ismételt telepítése, mivel sajnos Repair install funkciót nem kínál fel (talán parancssorból lehet?).

Linkblog: ASP.NET Menu IE8 alatt

Ha a standard ASP.NET Menu vezérlőnek használjuk a dinamikusan kinyíló funkcióit, akkor készüljünk fel rá, hogy a menünk Internet Explorer 8 alatt nem fog helyesen megjelenni.

A problémát a vezérlő által generált kódban léző z-index okozza, és az IE8 megjelenítése valójában helyes, mert ez a standard. Giorgio Sardo blogjában van rá megoldás, illetve létezik már Microsoft hotfix (KB962351) is.

Google Maps integrálása ASP.NET-tel

Meglepően egyszerű a Google térkép szolgáltatásának integrálása egy weboldalba, mindössze egy iframe elemre van szükségünk, aminek code behindból ügyesen beállítjuk az src attribútumát. Nem is értem, miért nem használják ezt több helyen.

Történetesen az a feladatom, hogy egy GridView-ban lévő Contact rekordok Address mezőjében lévő címet a grid alatt egy térképen jelenítsem meg. A kérképet egy iframefogja tartalmazni, amihez odacsaptam a runat=”server” attribútumot, hogy kódból el tudjam érni:

  <iframe runat="server" id="ifMap" width="500" height="300"></iframe>

Ezt a trükköt egyébként bármelyik HTML elemmel el lehet játszani, szerver oldalon HtmlGenericControl lesz belőle.

Ezért a GridView kapott egy gombot, ami ráadásul a CommandArgument segítségével viszi magával a címet is az eseménykezelőbe:

  <asp:Button runat="server" 
CommandArgument='<%# Eval( "Address" ) %>'
CommandName="ShowMap"
Text="Térképre" />

A gomb kattintást a RowCommand eseménykor lehet kezelni:

    if( e.CommandName == "ShowMap" )
    {
        this.ifMap.Attributes[ "src" ] = String.Format(
            CultureInfo.InvariantCulture,
            @"http://maps.google.com/maps?q={0}&output=embed",
            e.CommandArgument );
    }

A dolognak tehát az az érdekessége, hogy egy sima URL-be be tudok fűzni egy teljes címet, például “Budapest, Magyar Tudósok krt. 2.” és Google Maps rátalál a helyre. Sőt, rátalál olyan földrajzi nevekre is, amiket magyarul és angolul máshogy hívunk: Magyarország, Brazília, Peking.

Persze a térkép adatbázisa nem tökéletes, rólunk például azt hiszi, hogy itt tanyázunk, pedig valójában ebben az épületben lehet minket megtalálni (a Live Space nem engedi, hogy iframe-et szúrjak be ide 😦 ).

Technorati Tags: ,,,