2011. március havi bejegyzések

ASP.NET MVC Controller template-ek testreszabása

Ha egy ASP.NET MVC projektben új controllert generálok, annak valami ehhez hasonló lesz az eredménye:

public class DemoController : Controller
{
  // 
  // GET: /Demo/

  public ActionResult Index()
  {
    return View();
  }
}

Biztos nem én vagyok az egyetlen (vagy igen?), akinek több dolog is bántja a szemét a kommenttel kapcsolatban:

  • A teljesen felesleges // komment sor.
  • A semmitmondó komment.
  • A komment utáni üres sor.

Egyébként rendben is van Mosolygó arc

Szerencsére az MVC csapat már dolgozik azon, hogy a következő verzióban a generált kód “normálisabb” legyen. Nem lesz felesleges komment sor és üres sor sem, sőt talán a generált komment is tartalmasabb lesz. ASPInsiderként javasoltam, hogy legyen XML komment, de az volt a válasz, hogy mivel controller metódusról van szó, azt vagy az MVC runtime hívja meg, vagy egy unit test és egyik helyen sem segítene az IntelliSense, ezért nem lesz XML komment. Végülis ebben van logika, egyébként meg az a fő cél, hogy kevesebb legyen a kód.

Szerencsére nem kell megvárnunk a következő MVC verziót, hogy javítsunk a generátoron, megtehetjük magunk. A generáláshoz használt T4 sablon itt található: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates\AddController\Controller.tt

Ha ezt a fájlt átírjuk, akkor a gépünkön lévő összes MVC projekt az átírt változatot fogja használni.

Ha csak egy projektben szeretnénk más sablont használni, akkor a következő a teendő:

  1. A projektben létre kell hozni egy CodeTemplates és azon belül egy AddController mappát.
  2. Ide be kell másolni az előbb említett mappában található Controller.tt fájlt.
  3. A Solution Explorer ablakban be kell rá állítani, hogy Build Action = None.
  4. Át lehet írni a Controller.tt fájlt, ahogy jólesik.

Így végül csak lett XML kommentem és még source controlba is bekerült a sablon Mosolygó arc

 

Technorati-címkék: ,,,

HTML5 item és project template Visual Studiohoz

Sajnos a Visual Studio 2010-ben beépítetten nincs olyan project és item template, amivel egy kattintással hozhatnánk létre HTML5-ös oldalakat és projekteket. Szerencsére készíthetünk magunknak saját sablonokat, de már erre sincs szükség, mert Rey Bango megtette helyettünk (katt a teljes képért):

html5-template-choice

A sablon ingyenesen letölthető új verziója már a jQuery könyvtár 1.5.1 és a Modernizr 1.7 verzióját tartalmazza.

 

Technorati-címkék: ,,,

Windows Phone Marketplace magyar bankkártyával?

Olvasom a Windows Phone update history-ban, hogy a telefonon futó operációs rendszer mellett természetesen a Marketplace szoftverét is folyamatosan frissítik. A márciusi újdonságok között erre figyeltem fel:

We’ve also improved the experience of downloading apps larger than 20 megabytes, upgrading from trial apps to paid apps, using a credit card with an address outside the United States, […]

Eddig tudtuk, hogy mit jelent a US-only. Most megtanulhatjuk, hogy mit jelent egy amerikai cég számára az USA-n kívüli rész a térképen.

Kipróbálta már ezt valaki, működik magyar bankkártyával is, vagy továbbra is angol címre kell hazudni a Live ID-t?

Böngészők egymás mellett (side-by-side)

Itt a tavasz, rügyeznek a böngészők! Tagadhatatlan, hogy a március a böngészők hónapja volt, szinte minden böngészőgyártó kijött egy verzióval. Ennek minden felhasználó örülhet, hiszen a kis kedvencük tipikusan szebb, jobb és biztonságosabb is lett. (Egyúttal itt az alkalom, hogy ismét kipróbáljuk a többi böngészőt, és végiggondoljuk, hogy maradunk-e a megszokottnál, vagy esetleg váltunk, mert a másik ezúttal jobban sikerült.) Akik viszont tipikusan nem örülnek ennek, azok a webfejlesztők, nekünk ugyanis mind a régi, mind pedig az új böngésző verziókon tesztelnünk kell a webhelyeinket. Fel is merül rögtön a kérdés: lehet-e egymás mellé telepíteni egy böngésző régi és új verzióját?

Internet Explorer

Az Internet Explorer továbbra is szorosan integrálódik az operációs rendszerrel, ezért nem lehet belőle két verziót egymás mellé telepíteni. Szerencsére azért vannak megoldási lehetőségek, hogy ne kelljen több gépet alkalmaznunk a teszteléshez.

Windows Virtual PC

A Windows Virtual PC ingyenesen letölthető a Microsoft honlapjáról, amivel gyakorlatilag egy virtuális gépet futtathatunk. Ez a szokásos mellett egy teljesen másik operációs rendszer lehet, amibe telepíthetünk más verziójú IE-t. A gazda és a vendég virtuális gép olyan szépen integrálódik egymással, hogy a vendég virtuális gépen futó böngészőnkre mutató parancsikon beépülhet a gazda operációs rendszer Start Menüjébe, így észre se vesszük, hogy a programmal együtt egy másik operációs rendszer is elindul a háttérben.

A módszer ingyenes, működik mindenféle böngészővel, tesztelésnél az a hátránya, hogy a böngésző ablakok nyitása-csukása bizony nem megy villámgyorsan.

Internet Explorer Developer Toolbar

Az Internet Explorer már nagyon régóta tartalmaz egy fejlesztői eszközsávot, amely az F12 billentyű lenyomásával hívható elő legkönnyebben (katt a nagyobb képért):

Más IE verzió szimulálása az IE Developer Toolbaron

Itt van egy olyan lehetőség, hogy meg lehet változtatni a böngésző belső működését, most már IE 7, 8 és 9 verziók közül lehet választani, sőt még a Document Mode-ot is át lehet állítani. Tapasztalataim szerint ez kiválóan működik, hiteles, a szépséghibája az, hogy mindig elfelejtem, hogy éppen mire állítottam be utoljára, és nagyon oda kell figyelnem, hogy éppen milyen verzión tesztelem az oldalt. Ez persze az én csökevényességem, ettől függetlenül a módszert merem ajánlani mindenkinek.

Microsoft Expression SuperPreview

A Microsoft Expression termékcsaládnak része a SuperPreview, ami arra képes, hogy az oldalunk elrendezését megmutassa különböző böngészőkben. A megjelenítés sajnos nem interaktív, főleg CSS-t és site buildinget tudunk vele jól tesztelni. Egymás mellett jeleníti meg az oldalt több böngészőben és össze tudjuk hasonlítani a megjelenést (katt a nagyobb képért):

Expression SuperPreview

Nagyon kiváló eszköz annak a kiderítésére, hogy milyen eltérések lehetnek az oldal megjelenítésével kapcsolatban az egyes böngészőkön. Bár van belőle ingyenes önálló verzió is, a teljes többet tud: nem csak az IE-t ismeri. Nálam például ezeket a böngészőket kínálta fel (bár nálam IE9, FF 3.6 és 4, Opera és Chrome van telepítve) (katt a nagyobb képért):

A SuperPreview által felismert böngészők

Kicsit elszomorodtam, hogy a Firefox 4 nem támogatott, az Operának pedig nyoma sincs. Örömteli viszont, hogy előkerült a Safari, miután feliratkoztam a még bétában lévő online szolgáltatásra. Ez ingyenes és azt tudja, hogy valahol a felhőben végzi el az oldal renderelését sokféle böngészőben. Hát az a “sok” most éppen ennyi (katt a nagyobb képért):

Expression SuperPreview online services

A kezdeményezés mindenképpen dicséretes, de nem érzem benne azt a dinamikus fejlődést, amitől elkezdeném nap mint nap használni.

IETester

Az IETester ingyenesen letölthető kis program, ami nem kis hekkeléssel eléri, hogy egy programon belül egymás mellett futtathassunk IE 5.5, 6, 7, 8 és 9 verziókat (katt a nagyobb képért):

Az MSDN Kompetencia Központ honlapja IE 6 alatt IETesterben

Ez azért nem kis feladat, le a kalappal a programozó előtt. Sajnos a megoldás nem tökéletes, a főbb dolgok működnek, de egyes apróságok nem és ráadásul néha el is száll a program. Gyors tesztelésre kiváló, de azért 100%-osan nem bízom benne.

Firefox

A Firefox szerencsére sokkal egyszerűbb eset, mint az IE, mert lehet két verziót egymás mellett egy gépen futtatni. Ez kell hozzá:

  1. Külön mappába kell telepíteni a régi és az új verziót, nem szabad engedni az upgrade-et.
  2. Célszerű létrehozni önálló user profile-okat a régi és az új verzióhoz, hogy még véletlenül se keveredjenek a beállítások.
    • Ehhez elindítottam a Firefox User Profile Managert: firefox.exe –p –no-remote
    • Készítettem két felhasználói profilt:
      Firefox felhasználói profilok
  3. Át kell írni a Start Menüben a parancsikonokat: firefox.exe –p profilnév -no-remote
    Célszerű átírni a Start Menüben a mappák neveit is, illetve Firefox 4 esetén is létrehozni a Safe Mode parancsikont, aminél a parancssor végére egy –safe-mode kapcsoló kell.

Ez hiba nélkül működik, annyi szépséghibája van, hogy a régi és az új verzió ikonja pontosan ugyanúgy néz ki a tálcán, figyelni kell, hogy hova kattint az ember fejlesztés közben.

Mivel a két verzió más-más beállításokat használ, ezért természetesen a plugineket külön kell telepíteni mindkettőhöz (Firebugból például más verziót is kell telepíteni). Ha esetleg valami annyira nem akar működni, hogy el sem indul a böngésző, akkor célszerű megnézni Safe Mode-ban a telepített plugineket (nálam például valahogy a telepítés után rögtön bekerült a Toshiba Automatic Password Input in Fx 1.0 pluginje, ami már elindulni sem engedte a böngészőt, ki kellett kapcsolnom).

Chrome

A Chrome az egyik legfájdalommentesebb a sok böngésző közül, mert a felhasználó profil mappájába települ és észrevétlenül frissíti magát. A frissítést a Windows Task Scheduler vezérli, óránként nézi meg, hogy van-e újabb verzió és automatikusan telepíti is azt. Így igazából még sosem akartam két Chrome verziót telepíteni egymás mellé, mert minden felhasználó gyorsan átáll az új verzióra.

Opera és Safari

Az Opera és a Safari side-by-side futtatásával nincsenek tapasztalataim, ha nektek van, kérlek írjátok meg ide hozzászólásként. Köszönöm!

Durva ASP.NET-IIS breaking change a Server SP1-ben

Korábban írtam róla, hogy a .NET 4 GDR Update milyen jó, mert sok egyéb mellett például egy a Windows Server 2008 R2 Service Pack 1 által behozott problémát is megold. Nos, a rossz hír az, hogy nem mindent, ráadásul egy olyan breaking change éled fel tőle, ami nem kevés alkalmazást érinthet.

Van egy szunnyadó változás az ASP.NET környékén, ami egészen addig nem okoz gondot, amíg nem telepítünk egy olyan javítást (QFE), ami aktivizálja ezt a funkciót, például a nemrég megjelent WebMatrix+MVC3+… csomagot vagy éppen a Windows Server/7 SP1-et. A változás a kiterjesztés nélkül URL-ek kezelését érinti, és az a lényeg, hogy mostantól a “/” URL-re érkező kéréseket is az ASP.NET kapja el először és nem az IIS. (Ezt korábban is meg lehetett csinálni a runAllManagedModulesForallRequests beállításával.)

Korábban ez úgy működött, hogy a “/” URL-je jövő kérést az IIS-ben lévő DefaultDocumentModule kapta el és irányította át például a “/default.aspx” címre, átzavarva a kérést a szerver egész HTTP csővezetékén. Ebben a második körben harapott rá a kérésre az ASP.NET, és döntötte el a location és authorization beállítások alapján, hogy kiszolgálja-e a kérést.

Mostantól (.NET 4 + QFE) viszont megfordul a kép: mivel a kérésben nincs kiterjesztés, ezért először az ASP.NET kezdi el feldolgozni azt és ahogy azt elvárjuk, érvényesíti a location és authorization tag-ben lévő beállításokat (átirányít vagy kiszolgálja a kérést).

A rossz hír, hogy a friss .NET 4 GDR Update-nek erre az egészre egy fikarcnyi hatása sincs, ez a változás megmarad utána is. Ez by design viselkedés, ami azért szükséges, hogy az ASP.NET előbb végezze el a dolgát a kiterjesztés nélküli URL-ekre, mint hogy az IIS-ben lévő StaticFile handler lefutna.  A kellemetlenség igazi forrására akkor derül fény, amikor megnézzük az applicationHost.config fájlban, hogy mit is tartalmaz ez a handler:

<add name="StaticFile" path="*" verb="*"
modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" … />

Bizony, egy handlerben van a StaticFileModule és a DefaultDocumentModule is, tehát esély sincs rá, hogy a DefaultDocumentModule előbb dolgozza fel a kérést, mint az ASP.NET egy olyan gépen, ahol a kiterjesztés nélküli URL-ek kezelése be van kapcsolva  Szomorú arc

Ha nincs szükség a kiterjesztés nélküli URL-ekre, akkor az alábbi web.config módosítással orvosolható a probléma:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  </handlers>

  <!-- Ha az IIS még panaszkodik "disallowed configuration sections" miatt,
       akkor még ez is kellhet: -->
  <!--
    <validation validateIntegratedModeConfiguration="false" />
  -->
</system.webServer>

 

.NET 4 GDR Update (és javítás a javításhoz)

Rövidhír: megjelent egy frissítés a .NET Framework 4.0-hoz, teljes nevén Microsoft .NET Framework 4 General Distribution Release Update KB2468871 :

A frissítés több, mint 30-féle problémát javít (cumulative update roll-up), melyek között vannak bőven adatbáziskezeléssel, hibakereséssel és webfejlesztéssel kapcsolatos hibák is, valamint 6 új “feature” is, melyek főként webfejlesztéssel kapcsolatosak.

A sok issue között nagyon elbújik egy szerintem különösen fontos fix: egy javítás javítása, ami nem csak fejlesztőket, de üzemeltetőket is nagyon érdekelhet. Történt ugyanis, hogy nem túl régen megjelent a Windows 7/Windows Server 2008 R2 Service Pack 1, de sajnos későn derült ki, hogy a telepítése után egyes ASP.NET webalkalmazások elkezdenek nem működni IIS alatt. A problémát a kiterjesztés nélküli URL-ek kezelésével foglalkozó HTTP handler és a handlerek sorrendje okozza. Ezzel kapcsolatban korábban már megjelent a KB2520479 tudásbázis cikk, de eddig csak kézi megoldás volt a bajra. Most a .NET Framework 4.0-hoz megjelent frissítés ezt a hibát is kiküszöböli, tehát most már lehet bátran a szerverre is SP1-t telepíteni.

Technorati-címkék: ,,,

HTML5 audió-videó MIME típusok

Ha WebMatrix (IIS Express) vagy IIS alatt próbálkozunk a HTML5 új <audio> és <video> tag-jeivel, akkor először nagy valószínűséggel azt fogjuk tapasztalni, hogy bár a lejátszó megjelenik, a lejátszás nem indul el. Jobban megnézve a HTTP forgalmat, az alábbi hibaüzenettel szembesülhetünk:

HTTP Error 404.3 – Not Found
The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

A hibaüzenet és az alatta található részletes leírás eléggé magáért beszél, a hiba oka az, hogy az IIS nem engedélyezi az új audió és videó fájlok letöltését, mert nem ismeri őket. Az IIS kiokosításához persze használható a hibaüzenethez tartozó leírásban található parancssoros appcmd is, de sokkal egyszerűbb, ha beírjuk ezeket a sorokat a web.config fájlba és már készen is vagyunk:

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
      <mimeMap fileExtension=".m4v" mimeType="video/m4v" />            
      <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
      <mimeMap fileExtension=".webm" mimeType="video/webm" />
    
      <mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
      <mimeMap fileExtension=".oga" mimeType="audio/ogg" />
      <mimeMap fileExtension=".ogg" mimeType="audio/ogg" />            
      <mimeMap fileExtension=".spx" mimeType="audio/ogg" />
    
      <mimeMap fileExtension=".svg" mimeType="images/svg+xml" />
      <mimeMap fileExtension=".svgz" mimeType="images/svg+xml" />
    
      <remove fileExtension=".eot" />
      <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
      <mimeMap fileExtension=".otf" mimeType="font/otf" />
      <mimeMap fileExtension=".woff" mimeType="font/x-woff" />
            
    </staticContent>    
  </system.webServer>
</configuration>

Forrás: Mads Kristensen

 

Technorati-címkék: ,,,