Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento dokument popisuje nové funkce a vylepšení, které jsou zavedeny v ASP.NET 4.5. Popisuje také vylepšení vývoje pro web v sadě Visual Studio 2012. Tento dokument byl původně publikován 29. února 2012.
ASP.NET Core Runtime a architektura
Visual Studio 2012 Release Candidate
-
- Inteligentní úkoly
- Podpora WAI-ARIA
- Nové fragmenty kódu HTML5
- Extrakce do uživatelského ovládacího prvku
- IntelliSense pro nuggety kódu v atributech
- Automatické přejmenování odpovídající značky při přejmenování počáteční nebo koncové značky
- Generování obslužné rutiny události
- Inteligentní odsazení
- Dokončování příkazů Automatické redukce
ASP.NET Core Runtime a architektura
Asynchronní čtení a zápis požadavků a odpovědí HTTP
ASP.NET 4 zavedla schopnost číst entitu požadavku HTTP jako stream pomocí HttpRequest.GetBufferlessInputStream metoda. Tato metoda poskytla přístup streamování k entitě požadavku. Provedl se však synchronně, což provázalo vlákno po dobu trvání požadavku.
ASP.NET 4.5 podporuje schopnost číst streamy asynchronně u entity požadavku HTTP a možnost asynchronního vyprázdnění. ASP.NET 4.5 také umožňuje dvakrát ukládat do vyrovnávací paměti entitu požadavku HTTP, která poskytuje snadnější integraci s podřízenými obslužnými rutinami HTTP, jako jsou obslužné rutiny stránky .aspx a ASP.NET kontrolery MVC.
Vylepšení zpracování HttpRequest
Odkaz na stream vrácený ASP.NET 4.5 z HttpRequest.GetBufferlessInputStream podporuje synchronní i asynchronní metody čtení. Objekt Stream vrácený z GetBufferlessInputStream nyní implementuje BeginRead i EndRead metody. Asynchronní metody Stream umožňují asynchronně číst entitu požadavku v blocích, zatímco ASP.NET uvolní aktuální vlákno mezi každou iterací asynchronní smyčky čtení.
ASP.NET 4.5 také přidal doprovodnou metodu pro čtení entity požadavku ve vyrovnávací paměti: HttpRequest.GetBufferedInputStream. Toto nové přetížení funguje jako GetBufferlessInputStream, které podporuje synchronní i asynchronní čtení. Při čtení ale GetBufferedInputStream také zkopíruje bajty entity do ASP.NET interních vyrovnávacích pamětí, aby podřízené moduly a obslužné rutiny stále mohly přistupovat k entitě požadavku. Pokud například nějaký upstreamový kód v kanálu již přečetl entitu požadavku pomocí GetBufferedInputStream, můžete stále použít HttpRequest.Form nebo HttpRequest.Files. To vám umožní provádět asynchronní zpracování požadavku (například streamování velkého nahrávání souborů do databáze), ale přesto spustit .aspx stránky a řadiče MVC ASP.NET následně.
Asynchronní vyprázdnění odpovědi
Odesílání odpovědí klientovi HTTP může trvat poměrně dlouho, když je klient daleko nebo má připojení s nízkou šířkou pásma. Obvykle ASP.NET ukládat bajty odpovědí do vyrovnávací paměti, protože jsou vytvořeny aplikací. ASP.NET pak provede jednu operaci odesílání vyrovnávacích pamětí na konci zpracování požadavku.
Pokud je odpověď uložená do vyrovnávací paměti velká (například streamování velkého souboru do klienta), musíte pravidelně volat HttpResponse.Flush , aby se odeslal výstup ve vyrovnávací paměti klientovi a zachoval využití paměti pod kontrolou. Vzhledem k tomu, že Flush je synchronní volání, iterativní volání Flush stále spotřebovává vlákno po dobu potenciálně dlouhotrvajících požadavků.
ASP.NET 4.5 přidává podporu pro provádění vyprázdnění asynchronně pomocí metody BeginFlush a EndFlush třídy HttpResponse. Pomocí těchto metod můžete vytvořit asynchronní moduly a asynchronní obslužné rutiny, které přírůstkově odesílají data klientovi bez vázání vláken operačního systému. Mezi voláními BeginFlush a EndFlush ASP.NET uvolní aktuální vlákno. Tím se podstatně sníží celkový počet aktivních vláken, které jsou potřeba pro podporu dlouhotrvajících stahování HTTP.
Podpora pro await a task – založené asynchronní moduly a obslužné rutiny
Rozhraní .NET Framework 4 zavedlo asynchronní programovací koncept, který se označuje jako úkol. Úkoly jsou reprezentovány typem úlohy a souvisejícími typy v oboru názvů System.Threading.Tasks . Rozhraní .NET Framework 4.5 na tom staví s vylepšeními kompilátoru, které usnadňují práci s objekty Úloh . Kompilátory v rozhraní .NET Framework 4.5 podporují dvě nová klíčová slova: await a async. Klíčové slovo await je syntaktické zkratky pro označení, že část kódu by měla asynchronně čekat na nějakou jinou část kódu. Asynchronní klíčové slovo představuje nápovědu, kterou můžete použít k označení metod jako asynchronních metod založených na úlohách.
Kombinace await, async a Task objektu usnadňuje psaní asynchronního kódu v .NET 4.5. ASP.NET 4.5 podporuje tato zjednodušení pomocí nových rozhraní API, která umožňují psát asynchronní moduly HTTP a asynchronní obslužné rutiny HTTP pomocí nových vylepšení kompilátoru.
Asynchronní moduly HTTP
Předpokládejme, že chcete provádět asynchronní práci v rámci metody, která vrací objekt Task . Následující příklad kódu definuje asynchronní metodu, která provádí asynchronní volání ke stažení domovské stránky Microsoftu. Všimněte si použití asynchronního klíčového slova v podpisu metody a volání await DownloadStringTaskAsync.
private async Task
ScrapeHtmlPage(object caller, EventArgs e)
{
WebClient wc = new WebClient();
var result = await wc.DownloadStringTaskAsync("http://www.microsoft.com");
// Do something with the result
}
To je vše, co musíte napsat – rozhraní .NET Framework automaticky zpracuje uvolnění zásobníku volání při čekání na dokončení stahování a automatické obnovení zásobníku volání po dokončení stahování.
Teď předpokládejme, že chcete tuto asynchronní metodu použít v asynchronním modulu ASP.NET HTTP. ASP.NET 4.5 zahrnuje pomocnou metodu (EventHandlerTaskAsyncHelper) a nový typ delegáta (TaskEventHandler), který můžete použít k integraci asynchronních metod založených na úlohách se starším asynchronním programovacím modelem vystaveným kanálem ASP.NET HTTP. Tento příklad ukazuje, jak:
public void Init(HttpApplication
context)
{
// Wrap the Task-based method so that it can be used with
// the older async programming model.
EventHandlerTaskAsyncHelper helper =
new EventHandlerTaskAsyncHelper(ScrapeHtmlPage);
// The helper object makes it easy to extract Begin/End methods out of
// a method that returns a Task object. The ASP.NET pipeline calls the
// Begin and End methods to start and complete calls on asynchronous
// HTTP modules.
context.AddOnPostAuthorizeRequestAsync(
helper.BeginEventHandler, helper.EndEventHandler);
}
Asynchronní obslužné rutiny HTTP
Tradičním přístupem k psaní asynchronních obslužných rutin v ASP.NET je implementace rozhraní IHttpAsyncHandler . ASP.NET 4.5 zavádí asynchronní základní typ HttpTaskAsyncHandler , ze kterého můžete odvodit, což usnadňuje zápis asynchronních obslužných rutin.
Typ HttpTaskAsyncHandler je abstraktní a vyžaduje přepsání ProcessRequestAsync metody. Interně ASP.NET se postará o integraci návratového podpisu ( objekt úlohy ) ProcessRequestAsync se starším asynchronním programovacím modelem používaným kanálem ASP.NET.
Následující příklad ukazuje, jak můžete jako součást implementace asynchronní obslužné rutiny HTTP použít úlohu a await :
public class MyAsyncHandler : HttpTaskAsyncHandler
{
// ...
// ASP.NET automatically takes care of integrating the Task based override
// with the ASP.NET pipeline.
public override async Task ProcessRequestAsync(HttpContext context)
{
WebClient wc = new WebClient();
var result = await
wc.DownloadStringTaskAsync("http://www.microsoft.com");
// Do something with the result
}
}
Nové funkce ověření požadavku ASP.NET
Ve výchozím nastavení ASP.NET provádí ověření požadavku – kontroluje požadavky, aby hledaly značky nebo skripty v polích, hlavičkách, souborech cookie atd. Pokud se nějaké zjistí, ASP.NET vyvolá výjimku. Jedná se o první linii obrany proti potenciálním útokům skriptování mezi weby.
ASP.NET 4.5 usnadňuje selektivní čtení zastaralých dat požadavků. ASP.NET 4.5 také integruje oblíbenou knihovnu AntiXSS, která byla dříve externí knihovnou.
Vývojáři často požádali o možnost selektivního vypnutí ověřování požadavků pro své aplikace. Pokud je vaše aplikace například software fóra, můžete chtít uživatelům povolit odesílání příspěvků a komentářů ve fóru ve formátu HTML, ale přesto se ujistěte, že ověření žádosti kontroluje všechno ostatní.
ASP.NET 4.5 zavádí dvě funkce, které usnadňují selektivní práci s neplatným vstupem: odložené (opožděné) ověření žádosti a přístup k zastaralým datům žádosti.
Ověření požadavku Deferred ("opožděné")
Ve ASP.NET 4.5 se ve výchozím nastavení na ověření žádosti vztahují všechna data žádosti. Aplikaci však můžete nakonfigurovat tak, aby odložil ověření žádosti, dokud ve skutečnosti nebudete mít přístup k datům žádosti. (To se někdy označuje jako opožděné ověřování požadavků na základě termínů, jako je opožděné načítání pro určité scénáře dat.) Aplikaci můžete nakonfigurovat tak, aby používala odložené ověřování v souboru Web.config nastavením atributu requestValidationMode na hodnotu 4.5 v elementu httpRUntime , jak je znázorněno v následujícím příkladu:
<httpRuntime requestValidationMode="4.5" ... />
Pokud je režim ověření požadavku nastavený na hodnotu 4,5, aktivuje se ověření požadavku pouze pro konkrétní hodnotu požadavku a pouze v případě, že váš kód k této hodnotě přistupuje. Pokud například kód získá hodnotu Request.Form["forum_post"], ověření požadavku se vyvolá pouze pro tento prvek v kolekci formulářů. Žádná z ostatních prvků v kolekci Formulářů se neověřuje. V předchozích verzích ASP.NET se ověření požadavku aktivovalo pro celou kolekci požadavků při přístupu k libovolnému prvku v kolekci. Nové chování usnadňuje různým komponentám aplikace zobrazení různých částí dat požadavku, aniž by se aktivovalo ověřování požadavků na jiných částech.
Podpora neověřených požadavků
Samotné ověření odložené žádosti nevyřeší problém selektivního obejití ověření žádosti. Volání metody Request.Form["forum_post"] stále aktivuje ověření požadavku pro danou hodnotu požadavku. K tomuto poli ale můžete chtít přistupovat bez aktivace ověření, protože v tomto poli chcete povolit revize.
Aby to bylo možné, ASP.NET 4.5 teď podporuje neplatný přístup k vyžádání dat. ASP.NET 4.5 obsahuje novou vlastnost Neovalidované kolekce ve třídě HttpRequest . Tato kolekce poskytuje přístup ke všem běžným hodnotám dat požadavků, jako jsou Form, QueryString, Cookies a Url.
Když použijete příklad fóra, abyste mohli číst neověřená data žádostí, musíte nejprve nakonfigurovat aplikaci tak, aby používala nový režim ověření žádosti:
<httpRuntime requestValidationMode="4.5" ...
/>
Vlastnost HttpRequest.Unvalidated pak můžete použít ke čtení neplatné hodnoty formuláře:
var s = context.Request.Unvalidated.Form["forum_post"];
Upozorňující
Zabezpečení – Používejte neaktuální data požadavků s opatrností! ASP.NET 4.5 přidali vlastnosti a kolekce požadavků, které nejsou platné, abyste měli snadnější přístup k velmi specifickým zastaralým datům žádosti. U nezpracovaných dat požadavku však musíte provést vlastní ověření, abyste zajistili, že se uživatelům nevykreslí nebezpečný text.
Knihovna AntiXSS
Vzhledem k oblíbenosti knihovny Microsoft AntiXSS teď ASP.NET 4.5 zahrnuje základní kódovací rutiny z této knihovny verze 4.0.
Rutiny kódování jsou implementovány typem AntiXssEncoder v novém oboru názvů System.Web.Security.AntiXss . Typ AntiXssEncoder můžete použít přímo voláním některé ze statických metod kódování, které jsou implementovány v typu. Nejjednodušším přístupem k používání nových rutin anti-XSS je ale konfigurace ASP.NET aplikace tak, aby ve výchozím nastavení používala třídu AntiXssEncoder . Uděláte to tak, že do souboru Web.config přidáte následující atribut:
<httpRuntime ...
encoderType="System.Web.Security.AntiXss.AntiXssEncoder,System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
Pokud je atribut encoderType nastaven tak, aby používal AntiXssEncoder typ, veškeré kódování výstupu v ASP.NET automaticky používá nové kódovací rutiny.
Jedná se o části externí knihovny AntiXSS, které byly začleněny do ASP.NET 4.5:
- HtmlEncode, HtmlFormUrlEncode a HtmlAttributeEncode
- XmlAttributeEncode a XmlEncode
- UrlEncode a UrlPathEncode (nové)
- CssEncode
Podpora protokolu WebSockets
Protokol WebSockets je síťový protokol založený na standardech, který definuje, jak vytvořit zabezpečenou obousměrnou komunikaci v reálném čase mezi klientem a serverem přes PROTOKOL HTTP. Společnost Microsoft pracovala s orgány standardů IETF i W3C, aby pomohla definovat protokol. Protokol WebSockets je podporován všemi klienty (nejen prohlížeči), přičemž Společnost Microsoft investovala značné prostředky podporující protokol WebSockets v klientských i mobilních operačních systémech.
Protokol WebSockets usnadňuje vytváření dlouhotrvajících přenosů dat mezi klientem a serverem. Například psaní chatovací aplikace je mnohem jednodušší, protože můžete vytvořit skutečné dlouhotrvající připojení mezi klientem a serverem. Nemusíte se uchylovat k alternativním řešením, jako je pravidelné dotazování nebo dlouhodobé dotazování HTTP, abyste simulovat chování soketu.
ASP.NET 4.5 a IIS 8 zahrnují podporu protokolu WebSockets nízké úrovně, což ASP.NET vývojářům umožňuje používat spravovaná rozhraní API pro asynchronní čtení a zápis řetězcových i binárních dat do objektu WebSockets. Pro ASP.NET 4.5 existuje nový obor názvů System.Web.WebSockets , který obsahuje typy pro práci s protokolem WebSockets.
Klient prohlížeče vytvoří připojení WebSockets vytvořením objektu DOM WebSocket , který odkazuje na adresu URL v aplikaci ASP.NET, jak je znázorněno v následujícím příkladu:
socket = new WebSocket("ws://contoso.com/MyWebSocketApplication.ashx");
Koncové body WebSockets můžete vytvářet v ASP.NET pomocí libovolného typu modulu nebo obslužné rutiny. V předchozím příkladu byl použit soubor .ashx, protože soubory .ashx představují rychlý způsob, jak vytvořit obslužnou rutinu.
Podle protokolu WebSockets aplikace ASP.NET přijímá požadavek WebSockets klienta tím, že indikuje, že požadavek by měl být upgradován z požadavku HTTP GET na požadavek WebSockets. Tady je příklad:
HttpContext.Current.AcceptWebSocketRequest(// WebSocket delegate goes here)
Metoda AcceptWebSocketRequest přijímá delegát funkce, protože ASP.NET odvíjí aktuální požadavek HTTP a pak přenese řízení na delegát funkce. Koncepčně se tento přístup podobá tomu, jak používáte System.Threading.Thread, kde definujete delegáta spuštění vlákna, ve kterém se provádí práce na pozadí.
Po ASP.NET a klient úspěšně dokončil metodu handshake WebSockets, ASP.NET zavolá vašeho delegáta a aplikace WebSockets se spustí. Následující příklad kódu ukazuje jednoduchou aplikaci echo, která používá integrovanou podporu WebSockets v ASP.NET:
public async Task MyWebSocket(AspNetWebSocketContext context)
{
WebSocket socket = context.WebSocket;
while (true)
{
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
// Asynchronously wait for a message to arrive from a client
WebSocketReceiveResult result =
await socket.ReceiveAsync(buffer, CancellationToken.None);
// If the socket is still open, echo the message back to the client
if (socket.State == WebSocketState.Open)
{
string userMessage = Encoding.UTF8.GetString(buffer.Array, 0,
result.Count);
userMessage = "You sent: " + userMessage + " at " +
DateTime.Now.ToLongTimeString();
buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));
// Asynchronously send a message to the client
await socket.SendAsync(buffer, WebSocketMessageType.Text,
true, CancellationToken.None);
}
else { break; }
}
}
Podpora klíčového slova await a asynchronních operací založených na úlohách v .NET 4.5 je přirozeně vhodná pro psaní aplikací WebSockets. Příklad kódu ukazuje, že požadavek WebSockets běží zcela asynchronně uvnitř ASP.NET. Aplikace asynchronně čeká na odeslání zprávy z klienta voláním soketu await. ReceiveAsync. Podobně můžete klientovi odeslat asynchronní zprávu voláním soketu await. SendAsync.
V prohlížeči aplikace přijímá zprávy WebSockets prostřednictvím funkce onmessage . Pokud chcete odeslat zprávu z prohlížeče, zavoláte metodu odeslání typu WebSocket DOM, jak je znázorněno v tomto příkladu:
// Receive a string message from the server.
socket.onmessage = function(msg)
{
document.getElementById("serverData").innerHTML = msg.data;
};
// Send a string message from the browser.
socket.send(document.getElementById("msgText"));
V budoucnu bychom mohli vydávat aktualizace této funkce, které abstrahují některé kódování nízké úrovně, které je vyžadováno v této verzi pro aplikace WebSockets.
Vytváření sady a minifikace
Sdružování umožňuje kombinovat jednotlivé soubory JavaScriptu a CSS do sady, které se dají považovat za jeden soubor. Minifikace kondenzuje soubory JavaScriptu a CSS odebráním prázdných znaků a dalších znaků, které nejsou vyžadovány. Tyto funkce fungují s webovými formuláři, ASP.NET MVC a webovými stránkami.
Sady jsou vytvořeny pomocí třídy Bundle nebo jedné z jejích podřízených tříd, ScriptBundle a StyleBundle. Po konfiguraci instance sady je sada zpřístupněna příchozím požadavkům tak, že ji jednoduše přidáte do globální instance BundleCollection. Ve výchozích šablonách se konfigurace sady provádí v souboru BundleConfig. Tato výchozí konfigurace vytvoří sady prostředků pro všechny základní skripty a soubory CSS používané šablonami.
Na balíčky se odkazuje z zobrazení pomocí jedné z několika možných pomocných metod. Aby bylo možné podporovat vykreslování různých revizí pro sadu v režimu ladění vs. vydání, mají třídy ScriptBundle a StyleBundle pomocnou metodu Render. V režimu ladění vygeneruje vykreslení kód pro každý prostředek v sadě. Pokud je v režimu vydání, Render vygeneruje jeden element značek pro celou sadu. Přepínání mezi režimem ladění a vydání lze provést úpravou atributu ladění elementu kompilace v souboru web.config, jak je znázorněno níže:
<system.web>
<compilation targetframework="4.5" debug="true" />
...</system.web>
Kromě toho lze povolení nebo zakázání optimalizace nastavit přímo prostřednictvím BundleTable.EnableOptimizations vlastnost.
BundleTable.EnableOptimizations = true;
Když jsou soubory seskupené, jsou nejprve seřazené abecedně (způsob jejich zobrazení v Průzkumník řešení). Pak jsou uspořádané tak, aby se nejprve načetly známé knihovny a jejich vlastní rozšíření (například jQuery, MooTools a Dojo). Například konečné pořadí pro sdružování složky Scripts, jak je znázorněno výše, bude:
- jquery-1.6.2.js
- jquery-ui.js
- jquery.tools.js
- a.js
Soubory CSS se také seřadí abecedně a pak se přeuspořádají tak, aby reset.css a normalize.css přišly před jakýmkoli jiným souborem. Konečné řazení seskupení složky Styly uvedené výše bude následující:
- reset.css
- content.css
- forms.css
- globals.css
- menu.css
- styles.css
Vylepšení výkonu pro hostování webů
Rozhraní .NET Framework 4.5 a Windows 8 zavádí funkce, které vám pomůžou dosáhnout významného zvýšení výkonu pro úlohy webového serveru. To zahrnuje snížení (až 35 %) v době spuštění i v paměti webů hostování webů, které používají ASP.NET.
Klíčové faktory výkonu
V ideálním případě by všechny weby měly být aktivní a v paměti, aby zajistily rychlou reakci na další požadavek, kdykoli přijde. Mezi faktory, které mohou ovlivnit odezvu webu, patří:
- Čas potřebný k restartování webu po recyklaci fondu aplikací. To je doba, která trvá spuštění procesu webového serveru pro web, když sestavení webu již nejsou v paměti. (Sestavení platformy jsou stále v paměti, protože jsou používána jinými lokalitami.) Tato situace se označuje jako "studená lokalita, teplé spuštění architektury" nebo jen "spuštění studené lokality".
- Kolik paměti lokalita zabírá. Termíny pro toto jsou "spotřeba paměti pro jednotlivé weby" nebo "nesdílená pracovní sada".
Nová vylepšení výkonu se zaměřují na oba tyto faktory.
Požadavky na nové funkce výkonu
Požadavky na nové funkce je možné rozdělit do těchto kategorií:
- Vylepšení spuštěná v rozhraní .NET Framework 4.
- Vylepšení, která vyžadují rozhraní .NET Framework 4.5, ale můžou běžet v libovolné verzi Windows.
- Vylepšení, která jsou k dispozici pouze s rozhraním .NET Framework 4.5 ve Windows 8.
Zvýšení výkonu s jednotlivými úrovněmi vylepšení, které můžete povolit.
Některá vylepšení rozhraní .NET Framework 4.5 využívají také širší funkce výkonu, které platí i pro jiné scénáře.
Sdílení společných sestavení
Požadavek: .NET Framework 4 a Visual Studio 11 Developer Preview SDK
Různé lokality na serveru často používají stejná pomocná sestavení (například sestavení z úvodní sady nebo ukázkové aplikace). Každá lokalita má ve svém adresáři Bin vlastní kopii těchto sestavení. I když je kód objektu pro sestavení identický, jsou fyzicky oddělená sestavení, takže každé sestavení musí být při spuštění studené lokality přečteno samostatně a uchováno samostatně v paměti.
Nová funkce pro interning řeší tuto neefektivitu a snižuje požadavky paměti RAM i dobu načítání. Interning umožňuje systému Windows zachovat jednu kopii každého sestavení v systému souborů a jednotlivá sestavení ve složkách přihrádky lokality se nahradí symbolickými odkazy na jednu kopii. Pokud jednotlivá lokalita potřebuje odlišnou verzi sestavení, symbolický odkaz se nahradí novou verzí sestavení a ovlivní to jenom tuto lokalitu.
Sdílení sestavení pomocí symbolických odkazů vyžaduje nový nástroj s názvem aspnet_intern.exe, který umožňuje vytvářet a spravovat úložiště propojených sestavení. Poskytuje se jako součást sady Visual Studio 11 Developer Preview SDK. (Bude ale fungovat v systému, který má nainstalovanou pouze rozhraní .NET Framework 4, za předpokladu, že jste nainstalovali nejnovější aktualizaci.)
Abyste měli jistotu, že jsou všechna způsobilá sestavení internace, pravidelně spouštíte aspnet_intern.exe (například jednou týdně jako naplánovaný úkol). Typické použití je následující:
aspnet_intern -mode exec -sourcedir
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files" -interndir C:\ASPNETCommonAssemblies
Pokud chcete zobrazit všechny možnosti, spusťte nástroj bez argumentů.
Použití kompilace JIT s více jádry pro rychlejší spuštění
Požadavek: .NET Framework 4.5
Pro spuštění studené lokality musí být sestavení nejen načtena z disku, ale lokalita musí být zkompilována JIT. U komplexního webu to může znamenat značné zpoždění. Nová technika pro obecné účely v rozhraní .NET Framework 4.5 snižuje tato zpoždění tím, že rozšíří kompilaci JIT mezi dostupná jádra procesoru. Dělá to co nejvíce a co nejdříve pomocí informací shromážděných během předchozích startů webu. Tato funkce implementovaná metodou System.Runtime.ProfileOptimization.StartProfile .
Kompilace JIT pomocí více jader je ve výchozím nastavení povolená v ASP.NET, takže nemusíte nic dělat, abyste mohli tuto funkci využít. Pokud chcete tuto funkci zakázat, proveďte v souboru Web.config následující nastavení:
<configuration>
<!-- ... -->
<system.web>
<compilation profileGuidedOptimizations="None" />
<!-- ... -->
Ladění uvolňování paměti pro optimalizaci paměti
Požadavek: .NET Framework 4.5
Po spuštění lokality může být jeho použití haldy uvolňování paměti (GC) významným faktorem při spotřebě paměti. Stejně jako jakýkoli systém uvolňování paměti činí uvolňování paměti rozhraní .NET Framework kompromisy mezi časem procesoru (frekvence a významnost kolekcí) a spotřebou paměti (nadbytečné místo, které se používá pro nové, uvolněné nebo volné objekty). V předchozích verzích jsme poskytli pokyny ke konfiguraci uvolňování paměti pro dosažení správného zůstatku (například viz ASP.NET 2.0/3.5 Konfigurace sdíleného hostování).
Pro rozhraní .NET Framework 4.5 je místo více samostatných nastavení k dispozici nastavení konfigurace definované úlohou, které umožňuje všechna dříve doporučená nastavení GC a také nové ladění, které poskytuje další výkon pracovní sady pro jednotlivé lokality.
Pokud chcete povolit ladění paměti GC, přidejte do souboru Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config následující nastavení:
<configuration>
<!-- ... -->
<runtime>
<performanceScenario value="HighDensityWebHosting" />
<!-- ... -->
(Pokud znáte předchozí pokyny pro změny aspnet.config, mějte na paměti, že toto nastavení nahrazuje stará nastavení – například není nutné nastavit gcServer, gcConcurrent atd. Původní nastavení nemusíte odebírat.)
Předběžné načítání webových aplikací
Požadavek: .NET Framework 4.5 běžící ve Windows 8
V několika verzích systém Windows zahrnul technologii známou jako prefetcher , která snižuje náklady na čtení disku při spuštění aplikace. Vzhledem k tomu, že studené spuštění je problémem převážně pro klientské aplikace, tato technologie nebyla součástí Windows Serveru, která zahrnuje pouze komponenty, které jsou nezbytné pro server. Předběžné načítání je nyní k dispozici v nejnovější verzi Windows Serveru, kde může optimalizovat spouštění jednotlivých webů.
Pro Windows Server není ve výchozím nastavení povolený prefetcher. Pokud chcete povolit a nakonfigurovat prefetcher pro hostování webů s vysokou hustotou, spusťte na příkazovém řádku následující sadu příkazů:
sc config sysmain start=auto
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" /v EnablePrefetcher /t REG_DWORD /d 2 /f
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Prefetcher" /v MaxPrefetchFiles /t REG_DWORD /d 8192 /f
net start sysmain
Pokud chcete integrovat prefetcher s aplikacemi ASP.NET, přidejte do souboru Web.config následující kód:
<configuration>
<!-- ... -->
<system.web>
<compilation enablePrefetchOptimization="true" />
<!-- ... -->
ASP.NET – webové formuláře
Ovládací prvky dat silného typu
Webové formuláře v ASP.NET 4.5 obsahují některá vylepšení pro práci s daty. Prvním vylepšením jsou ovládací prvky dat silného typu. U ovládacích prvků Webových formulářů v předchozích verzích ASP.NET zobrazíte hodnotu vázanou na data pomocí výrazu Eval a datové vazby:
<ul>
<asp:Repeater runat="server" ID="customers">
<ItemTemplate>
<li>
First Name: <%# Eval("FirstName")%><br />
Last Name: <%# Eval("LastName")%><br />
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
Pro obousměrnou datovou vazbu použijte bind:
<asp:FormView runat="server" ID="editCustomer">
<EditItemTemplate>
<div>
<asp:Label runat="server" AssociatedControlID="firstName">
First Name:</asp:Label>
<asp:TextBox ID="firstName" runat="server"
Text='<%#Bind("FirstName") %>' />
</div>
<div>
<asp:Label runat="server" AssociatedControlID="lastName">
First Name:</asp:Label>
<asp:TextBox ID="lastName" runat="server"
Text='<%#
Bind("LastName") %>' />
</div>
<asp:Button runat="server" CommandName="Update"/>
</EditItemTemplate>
</asp:FormView>
V době běhu tato volání používají reflexi ke čtení hodnoty zadaného členu a následnému zobrazení výsledku v kódu. Tento přístup usnadňuje svázání dat s libovolnými, neshadovanými daty.
Výrazy vazby dat, jako je tato možnost, ale nepodporují funkce, jako je IntelliSense pro názvy členů, navigace (například Přejít k definici) nebo kontrola času kompilace pro tyto názvy.
Chcete-li tento problém vyřešit, ASP.NET 4.5 přidává možnost deklarovat datový typ dat, ke kterým je ovládací prvek vázán. Provedete to pomocí nové ItemType vlastnost. Při nastavení této vlastnosti jsou v oboru výrazů vazby dat k dispozici dvě nové typové proměnné: Item a BindItem. Vzhledem k tomu, že jsou proměnné silného typu, získáte úplné výhody vývojového prostředí sady Visual Studio.
Pro obousměrné výrazy datové vazby použijte proměnnou BindItem :
<asp:FormView runat="server" ID="editCustomer">
<EditItemTemplate>
<div>
<asp:Label runat="server" AssociatedControlID="firstName">
First Name:</asp:Label>
<asp:TextBox ID="firstName" runat="server"
Text='<%#BindItem.FirstName %>' />
</div>
<div>
<asp:Label runat="server" AssociatedControlID="lastName">
First Name:</asp:Label>
<asp:TextBox ID="lastName" runat="server"
Text='<%#BindItem.LastName %>' />
</div>
<asp:Button runat="server" CommandName="Update"/>
</EditItemTemplate>
</asp:FormView>
Většina ovládacích prvků v rozhraní webových formulářů ASP.NET, které podporují datovou vazbu, byly aktualizovány tak, aby podporovaly vlastnost ItemType .
Vazby modelu
Vazby modelu rozšiřují datovou vazbu v ovládacích prvcích webového formuláře ASP.NET, aby fungovaly s přístupem k datům zaměřeným na kód. Zahrnuje koncepty z ovládacího prvku ObjectDataSource a z vazby modelu v ASP.NET MVC.
Výběr dat
Chcete-li nakonfigurovat ovládací prvek dat pro použití vazby modelu k výběru dat, nastavte vlastnost SelectMethod ovládacího prvku na název metody v kódu stránky. Ovládací prvek dat volá metodu v příslušné době v životním cyklu stránky a automaticky sváže vrácená data. Není nutné explicitně volat metodu DataBind .
V následujícím příkladu je ovládací prvek GridView nakonfigurován pro použití metody s názvem GetCategories:
<asp:GridView ID="categoriesGrid"
runat="server"
ItemType="WebApplication1.Model.Category"
SelectMethod="GetCategories" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="CategoryID" HeaderText="ID" />
<asp:BoundField DataField="CategoryName" HeaderText="Name" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField HeaderText="# of Products">
<ItemTemplate><%# Item.Products.Count %></ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
V kódu stránky vytvoříte metodu GetCategories . Pro jednoduchou operaci výběru nepotřebuje metoda žádné parametry a měla by vrátit IEnumerable nebo IQueryable objekt. Pokud je nastavena nová vlastnost ItemType (která umožňuje výrazy datové vazby silného typu, jak je vysvětleno v části Ovládací prvky dat silného typu dříve), měly by být vráceny obecné verze těchto rozhraní – IEnumerable T> nebo IQueryable<<T, s parametrem T> odpovídajícím typu ItemType vlastnost (například IQueryable<Category>).
Následující příklad ukazuje kód pro GetCategories metoda. Tento příklad používá model Entity Framework Code First s ukázkovou databází Northwind. Kód zajistí, že dotaz vrátí podrobnosti o souvisejících produktech pro každou kategorii prostřednictvím metody Include . (Tím zajistíte, že Element TemplateField v kódu zobrazuje počet produktů v každé kategorii, aniž by bylo nutné vybrat n+1.)
public IQueryable<Category>
GetCategories()
{
var db = new Northwind();
return db.Categories.Include(c => c.Products);
}
Při spuštění stránky ovládací prvek GridView volá GetCategories metoda automaticky a vykresluje vrácená data pomocí nakonfigurovaných polí:

Protože select metoda vrací IQueryable objekt, GridView ovládací prvek může dále manipulovat s dotazem před jeho spuštěním. Například Ovládací prvek GridView může přidat výrazy dotazu pro řazení a stránkování do vráceného objektu IQueryable před jeho spuštěním, takže tyto operace provádí základní zprostředkovatel LINQ. V tomto případě Entity Framework zajistí, že se tyto operace provádějí v databázi.
Následující příklad ukazuje ovládací prvek GridView upravený tak, aby umožňoval řazení a stránkování:
<asp:GridView ID="categoriesGrid"
runat="server"
AutoGenerateColumns="false"
AllowSorting="true" AllowPaging="true" PageSize="5"
ItemType="WebApplication1.Model.Category" DataKeyNames="CategoryID"
SelectMethod="GetCategories"
UpdateMethod="UpdateCategory">
<Columns>
<asp:BoundField DataField="CategoryID" HeaderText="ID" SortExpression="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="Name" SortExpression="CategoryName" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField HeaderText="# of Products">
<ItemTemplate><%# Item.Products.Count %></ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>No categories found with a product count of
<%# minProductsCount.SelectedValue %></EmptyDataTemplate>
</asp:GridView>
Když se stránka spustí, může ovládací prvek zajistit, aby se zobrazila pouze aktuální stránka dat a že je seřazená podle vybraného sloupce:

Chcete-li filtrovat vrácená data, musí být parametry přidány do metody výběru. Tyto parametry se naplní vazbou modelu za běhu a před vrácením dat je můžete použít ke změně dotazu.
Předpokládejme například, že chcete uživatelům umožnit filtrovat produkty zadáním klíčového slova do řetězce dotazu. Do metody můžete přidat parametr a aktualizovat kód tak, aby používal hodnotu parametru:
public IQueryable<Product>
GetProducts(string keyword)
{
IQueryable<Product> query = _db.Products;
if (!String.IsNullOrWhiteSpace(keyword))
{
query = query.Where(p => p.ProductName.Contains(keyword));
}
return query;
}
Tento kód obsahuje výraz Where, pokud je pro klíčové slovo zadaná hodnota, a vrátí výsledky dotazu.
Zprostředkovatelé hodnot
Předchozí příklad nebyl specifický o tom, odkud hodnota parametru klíčového slova pochází. K označení těchto informací můžete použít atribut parametru. V tomto příkladu můžete použít třídu QueryStringAttribute , která je v oboru názvů System.Web.ModelBinding :
public IQueryable<Product>
GetProducts([QueryString]string keyword)
{
IQueryable<Product> query = _db.Products;
if (!String.IsNullOrWhiteSpace(keyword))
{
query = query.Where(p => p.ProductName.Contains(keyword));
}
return query;
}
To dává vazbě modelu, aby se pokusil vytvořit vazbu hodnoty z řetězce dotazu na parametr klíčového slova za běhu. (To může zahrnovat provedení převodu typu, i když v tomto případě ne.) Pokud hodnotu nelze zadat a typ není nullable, vyvolá se výjimka.
Zdroje hodnot pro tyto metody jsou označovány jako zprostředkovatelé hodnot a atributy parametrů, které označují, který zprostředkovatel hodnot použít, jsou označovány jako atributy zprostředkovatele hodnot. Webové formuláře budou obsahovat zprostředkovatele hodnot a odpovídající atributy pro všechny typické zdroje uživatelského vstupu v aplikaci Webové formuláře, jako je řetězec dotazu, soubory cookie, hodnoty formulářů, ovládací prvky, stav zobrazení, stav relace a vlastnosti profilu. Můžete také napsat vlastní zprostředkovatele hodnot.
Ve výchozím nastavení se název parametru používá jako klíč k vyhledání hodnoty v kolekci zprostředkovatele hodnot. V tomto příkladu kód vyhledá hodnotu řetězce dotazu s názvem klíčové slovo (například ~/default.aspx?keyword=chef). Vlastní klíč můžete zadat tak, že ho předáte jako argument atributu parametru. Pokud například chcete použít hodnotu proměnné řetězce dotazu s názvem q, můžete to udělat takto:
public IQueryable<Product>
GetProducts([QueryString("q")]string keyword)
{
IQueryable<Product> query = _db.Products;
if (!String.IsNullOrWhiteSpace(keyword))
{
query = query.Where(p => p.ProductName.Contains(keyword));
}
return query;
}
Pokud je tato metoda v kódu stránky, mohou uživatelé filtrovat výsledky předáním klíčového slova pomocí řetězce dotazu:

Vazba modelu provádí mnoho úloh, které byste jinak museli kódovat ručně: čtení hodnoty, kontrola hodnoty null, pokus o převod na příslušný typ, kontrola úspěšného převodu a nakonec použití hodnoty v dotazu. Výsledkem vazby modelu je mnohem méně kódu a schopnost opakovaně používat funkce v celé aplikaci.
Filtrování podle hodnot z ovládacího prvku
Předpokládejme, že chcete rozšířit příklad tak, aby uživatel zvolil hodnotu filtru z rozevíracího seznamu. Do značek přidejte následující rozevírací seznam a nakonfigurujte ho tak, aby získal data z jiné metody pomocí vlastnosti SelectMethod :
<asp:Label runat="server" AssociatedControlID="categories"
Text="Select a category to show products for: " />
<asp:DropDownList runat="server" ID="categories"
SelectMethod="GetCategories" AppendDataBoundItems="true"
DataTextField="CategoryName" DataValueField="CategoryID"
AutoPostBack="true">
<asp:ListItem Value="" Text="- all -" />
</asp:DropDownList>
Obvykle byste také přidali EmptyDataTemplate element do ovládacího prvku GridView , aby ovládací prvek zobrazil zprávu, pokud nejsou nalezeny žádné odpovídající produkty:
<asp:GridView ID="productsGrid"
runat="server" DataKeyNames="ProductID"
AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false"
SelectMethod="GetProducts" >
<Columns>
<asp:BoundField DataField="ProductID" HeaderText="ID" />
<asp:BoundField DataField="ProductName" HeaderText="Name"
SortExpression="ProductName" />
<asp:BoundField DataField="UnitPrice" HeaderText="Unit Price"
SortExpression="UnitPrice" />
<asp:BoundField DataField="UnitsInStock" HeaderText="# in Stock"
SortExpression="UnitsInStock" />
</Columns>
<EmptyDataTemplate>
No products matching the filter criteria were found</EmptyDataTemplate>
</asp:GridView>
Do kódu stránky přidejte novou metodu výběru pro rozevírací seznam:
public IQueryable<Category>
GetCategories()
{
return _db.Categories;
}
Nakonec aktualizujte metodu GetProducts select tak, aby převzala nový parametr, který obsahuje ID vybrané kategorie z rozevíracího seznamu:
public IQueryable<Product>
GetProducts(
[QueryString("q")] string keyword,
[Control("categories")] int? categoryId)
{
IQueryable<Product> query = _db.Products;
if (!String.IsNullOrWhiteSpace(keyword))
{
query = query.Where(p => p.ProductName.Contains(keyword));
}
if (categoryId.HasValue && categoryId > 0)
{
query = query.Where(p => p.CategoryID == categoryId);
}
return query;
}
Když se stránka spustí, můžou uživatelé vybrat kategorii z rozevíracího seznamu a ovládací prvek GridView se automaticky znovu vyváže, aby se zobrazila filtrovaná data. To je možné, protože vazba modelu sleduje hodnoty parametrů pro výběrové metody a zjišťuje, jestli se po zpětném vrácení změnila jakákoli hodnota parametru. Pokud ano, vazby modelu vynutí přidružený ovládací prvek dat, aby se znovu sváže s daty.

Html Kódované výrazy datových vazeb
Teď můžete kódovat výsledek výrazů datových vazeb ve formátu HTML. Přidejte dvojtečku (:) na konec <předpony %#, která označuje výraz datové vazby:
<asp:TemplateField HeaderText="Name">
<ItemTemplate><%#: Item.Products.Name %></ItemTemplate>
</asp:TemplateField>
Nerušivé ověřování
Teď můžete nakonfigurovat integrované ovládací prvky validátoru tak, aby pro logiku ověřování na straně klienta používaly nerušivé JavaScript. Tím se výrazně zmenšuje množství JavaScriptu vykresleného v kódu stránky a zmenšuje celkovou velikost stránky. Nerušivé javascriptové ovládací prvky validátoru můžete nakonfigurovat některým z těchto způsobů:
Globálně přidáním následujícího nastavení do elementu <appSettings> v souboru Web.config:
<add name="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />Globálně nastavením statické vlastnosti System.Web.UI.ValidationSettings.UnobtrusiveValidationMode na UnobtrusiveValidationMode.WebForms (obvykle v metodě Application_Start v souboru Global.asax).
Individuálně pro stránku nastavením nové UnobtrusiveValidationMode vlastnost Page třídy UnobtrusiveValidationMode.WebForms.
Aktualizace HTML5
Některé vylepšení ovládacích prvků serveru Webových formulářů, které využívají nové funkce HTML5:
- Vlastnost TextMode ovládacího prvku TextBox byla aktualizována tak, aby podporovala nové typy vstupu HTML5, jako jsou e-mail, datum a tak dále.
- Ovládací prvek FileUpload teď podporuje více nahrávání souborů z prohlížečů, které podporují tuto funkci HTML5.
- Ovládací prvky validátoru teď podporují ověřování vstupních elementů HTML5.
- Nové elementy HTML5, které mají atributy, které představují adresu URL, nyní podporují runat="server". V důsledku toho můžete použít ASP.NET konvence v cestách URL, jako je například operátor ~ k reprezentaci kořenového adresáře aplikace (například <video runat="server" src="~/myVideo.wmv" />).
- Ovládací prvek UpdatePanel byl opraven tak, aby podporoval publikování vstupních polí HTML5.
ASP.NET MVC 4
ASP.NET MVC 4 Beta je teď součástí sady Visual Studio 11 Beta. ASP.NET MVC je architektura pro vývoj vysoce testovatelných a udržovatelných webových aplikací s využitím modelu MVC (Model-View-Controller). ASP.NET MVC 4 usnadňuje vytváření aplikací pro mobilní web a zahrnuje ASP.NET webové rozhraní API, které vám pomůže sestavovat služby HTTP, které se dostanou k libovolnému zařízení. Další informace najdete ve zprávě k vydání verze ASP.NET MVC 4.
ASP.NET – webové stránky 2
Mezi nové funkce patří:
- Nové a aktualizované šablony webu
- Přidání ověřování na straně serveru a na straně klienta pomocí pomocné rutiny ověřování
- Možnost registrovat skripty pomocí správce prostředků
- Povolení přihlášení z Facebooku a jiných webů pomocí OAuth a OpenID
- Přidání map pomocí pomocné rutiny Mapy
- Souběžné spouštění aplikací webových stránek
- Vykreslování stránek pro mobilní zařízení
Další informace o těchto funkcích a příkladech kódu na celé stránce naleznete v tématu Hlavní funkce webových stránek 2 Beta.
Visual Web Developer 11 Beta
Tato část obsahuje informace o vylepšeních vývoje webu ve Visual Web Developeru 11 Beta a Visual Studio 2012 Release Candidate.
Sdílení projektů mezi sadou Visual Studio 2010 a Visual Studio 2012 Release Candidate (Kompatibilita projektů)
Dokud visual Studio 2012 Release Candidate neotevře existující projekt v novější verzi sady Visual Studio, spustil Průvodce převodem. To přinutilo upgrade obsahu (prostředků) projektu a řešení na nové formáty, které nebyly zpětně kompatibilní. Proto po převodu nelze projekt otevřít ve starší verzi sady Visual Studio.
Mnoho zákazníků nám řeklo, že to není správný přístup. V sadě Visual Studio 11 Beta teď podporujeme sdílení projektů a řešení pomocí sady Visual Studio 2010 SP1. To znamená, že pokud otevřete projekt 2010 v sadě Visual Studio 2012 Release Candidate, budete moct projekt otevřít v sadě Visual Studio 2010 SP1.
Poznámka:
Mezi sadou Visual Studio 2010 SP1 a Visual Studio 2012 Release Candidate nelze sdílet několik typů projektů. Patří mezi ně některé starší projekty (například projekty ASP.NET MVC 2) nebo projekty pro speciální účely (například projekty nastavení).
Při prvním otevření webového projektu Visual Studio 2010 SP1 v sadě Visual Studio 11 Beta se do souboru projektu přidají následující vlastnosti:
- FileUpgradeFlags
- UpgradeBackupLocation
- OldToolsVersion
- VisualStudioVersion
- VSToolsPath
FileUpgradeFlags, UpgradeBackupLocation a OldToolsVersion se používají procesem, který upgraduje soubor projektu. Nemají žádný vliv na práci s projektem v sadě Visual Studio 2010.
VisualStudioVersion je nová vlastnost používaná nástrojem MSBuild 4.5, která označuje verzi sady Visual Studio pro aktuální projekt. Protože tato vlastnost v nástroji MSBuild 4.0 neexistuje (verze nástroje MSBuild, kterou používá Visual Studio 2010 SP1), vložíme do souboru projektu výchozí hodnotu.
Vlastnost VSToolsPath slouží k určení správného souboru .targets pro import z cesty reprezentované nastavením MSBuildExtensionsPath32.
Existují také některé změny související s prvky importu. Tyto změny se vyžadují, aby byla podporována kompatibilita mezi oběma verzemi sady Visual Studio.
Poznámka:
Pokud se projekt sdílí mezi sadou Visual Studio 2010 SP1 a verzí Visual Studio 11 Beta na dvou různých počítačích a pokud projekt obsahuje místní databázi ve složce App_Data, musíte se ujistit, že je na obou počítačích nainstalovaná verze SQL Serveru používaného databází.
Změny konfigurace v šablonách webu ASP.NET 4.5
Ve výchozím souboru Web.config pro web vytvořený pomocí šablon webů v sadě Visual Studio 2012 Release Candidate byly provedeny následující změny:
- V elementu
<httpRuntime>encoderTypeje atribut nyní nastaven ve výchozím nastavení tak, aby používal antiXSS typy, které byly přidány do ASP.NET. Podrobnosti najdete v tématu AntiXSS Library. - Také v elementu
<httpRuntime>requestValidationModeje atribut nastaven na "4.5". To znamená, že ve výchozím nastavení je ověření požadavku nakonfigurované tak, aby používalo odložené (opožděné) ověřování. Podrobnosti najdete v tématu Nové funkce ověření požadavku ASP.NET. - Prvek
<modules>oddílu<system.webServer>neobsahujerunAllManagedModulesForAllRequestsatribut. (Výchozí hodnota je false.) To znamená, že pokud používáte verzi služby IIS 7, která nebyla aktualizována na aktualizaci SP1, může dojít k problémům se směrováním na novém webu. Další informace naleznete v tématu Nativní podpora ve službě IIS 7 pro ASP.NET směrování.
Tyto změny nemají vliv na existující aplikace. Mohou však představovat rozdíl v chování mezi existujícími weby a novými weby, které vytvoříte pro ASP.NET 4.5 pomocí nových šablon.
Nativní podpora ve službě IIS 7 pro směrování ASP.NET
Nejedná se o změnu ASP.NET, ale změna šablon pro nové projekty webů, které vás mohou ovlivnit, pokud pracujete ve verzi služby IIS 7, která nemá aktualizaci SP1 nainstalovanou.
V ASP.NET můžete do aplikací přidat následující nastavení konfigurace, aby bylo možné podporovat směrování:
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<!-- more -->
</modules>
</system.webServer>
</configuration>
Když runAllManagedModulesForAllRequests je true, adresa URL jako http://mysite/myapp/home přejde na ASP.NET, i když neexistuje žádné .aspx, .mvc nebo podobné rozšíření na adrese URL.
Aktualizace, která byla provedena ve službě IIS 7, způsobí , že nastavení runAllManagedModulesForAllRequests není nutné a podporuje směrování ASP.NET nativně. (Informace o aktualizaci najdete v článku podpora Microsoftu Je k dispozici aktualizace, která umožňuje určitým obslužným rutinám služby IIS 7.0 nebo IIS 7.5 zpracovávat požadavky, jejichž adresy URL nekončí tečkou.)
Pokud váš web běží ve službě IIS 7 a pokud je služba IIS aktualizovaná, není nutné nastavit runAllManagedModulesForAllRequests na hodnotu true. Ve skutečnosti se nastavení na true nedoporučuje, protože pro požadavek přidává zbytečné režijní náklady na zpracování. Pokud je toto nastavení pravdivé, všechny požadavky, včetně požadavků pro .htm, .jpg a další statické soubory, také procházejí kanálem ASP.NET žádosti.
Pokud vytvoříte nový web ASP.NET 4.5 pomocí šablon poskytovaných v sadě Visual Studio 2012 RC, konfigurace webu nezahrnuje nastavení runAllManagedModulesForAllRequests . To znamená, že ve výchozím nastavení je toto nastavení false.
Pokud pak spustíte web ve Windows 7 bez aktualizace SP1, služba IIS 7 nebude obsahovat požadovanou aktualizaci. V důsledku toho směrování nebude fungovat a zobrazí se chyby. Pokud máte problém, kdy směrování nefunguje, můžete provést jednu z následujících akcí:
- Aktualizujte Systém Windows 7 na SP1, který přidá aktualizaci do služby IIS 7.
- Nainstalujte aktualizaci popsanou v dříve uvedeném článku podpora Microsoftu.
- Nastavte runAllManagedModulesForAllRequests na true v souboru Web.config daného webu. Mějte na paměti, že to zvýší režii požadavků.
Editor HTML
Inteligentní úkoly
V návrhovém zobrazení mají složité vlastnosti ovládacích prvků serveru často přidružená dialogová okna a průvodce, aby bylo snadné je nastavit. Pomocí speciálního dialogového okna můžete například přidat zdroj dat do ovládacího prvku Repeater nebo přidat sloupce do ovládacího prvku GridView .
Tento typ nápovědy k uživatelskému rozhraní pro složité vlastnosti však nebyl v zobrazení Zdroj k dispozici. Proto Visual Studio 11 zavádí inteligentní úlohy pro zobrazení zdroje. Inteligentní úlohy jsou klávesové zkratky pracující s kontextem pro běžně používané funkce v editorech jazyka C# a Visual Basic.
U ovládacích prvků webových formulářů ASP.NET se inteligentní úlohy zobrazí na serverových značkách jako malý glyf, když je kurzor uvnitř prvku:

Inteligentní úkol se rozbalí, když kliknete na glyf nebo stisknete kombinaci kláves CTRL+. (tečka), stejně jako v editorech kódu. Zobrazí se klávesové zkratky podobné inteligentním úlohám v návrhovém zobrazení.

Například Inteligentní úloha na předchozím obrázku znázorňuje možnosti Úlohy GridView. Pokud zvolíte Upravit sloupce, zobrazí se následující dialogové okno:

Vyplnění dialogového okna nastaví stejné vlastnosti, které můžete nastavit v návrhovém zobrazení. Po kliknutí na tlačítko OK se revize ovládacího prvku aktualizuje o nové nastavení:

Podpora WAI-ARIA
Psaní přístupných webů je stále důležitější. Standard přístupnosti WAI-ARIA definuje, jak by vývojáři měli psát přístupné weby. Tento standard je teď plně podporovaný v sadě Visual Studio.
Atribut role teď má například úplnou technologii IntelliSense:

Standard WAI-ARIA také zavádí atributy, které mají předponu aria, které umožňují přidat sémantiku do dokumentu HTML5. Visual Studio také plně podporuje tyto atributy aria:

Nové fragmenty kódu HTML5
Aby bylo psaní běžně používaných značek HTML5 rychlejší a jednodušší, visual Studio obsahuje řadu fragmentů kódu. Příkladem je fragment videa:

Pokud chcete vyvolat fragment kódu, stiskněte dvakrát klávesu Tab, když je prvek vybrán v IntelliSense:

Tím se vytvoří fragment kódu, který můžete přizpůsobit.
Extrakce do uživatelského ovládacího prvku
Ve velkých webových stránkách může být vhodné přesunout jednotlivé části do uživatelských ovládacích prvků. Tato forma refaktoringu může pomoct zvýšit čitelnost stránky a zjednodušit strukturu stránky.
Pokud to chcete usnadnit, můžete při úpravách stránek webových formulářů ve zdrojovém zobrazení vybrat text na stránce, kliknout na něj pravým tlačítkem myši a pak zvolit Extrahovat do uživatelského ovládacího prvku:

IntelliSense pro nuggety kódu v atributech
Visual Studio vždy poskytuje IntelliSense pro nuggety kódu na straně serveru v libovolné stránce nebo ovládacím prvku. Visual Studio teď také obsahuje IntelliSense pro nuggety kódu v atributech HTML.

To usnadňuje vytváření výrazů datových vazeb:

Automatické přejmenování odpovídající značky při přejmenování počáteční nebo koncové značky
Pokud přejmenujete element HTML (například změníte značku div na značku záhlaví ), změní se odpovídající levá nebo pravá značka také v reálném čase.

To pomáhá vyhnout se chybě, kdy zapomenete změnit uzavírací značku nebo změnit nesprávnou značku.
Generování obslužné rutiny události
Visual Studio teď obsahuje funkce v zobrazení Zdroj, které vám pomůžou psát obslužné rutiny událostí a svázat je ručně. Pokud upravujete název události v zobrazení Zdroj, intelliSense zobrazí <vytvořit novou událost>, která vytvoří obslužnou rutinu události v kódu stránky se správným podpisem:

Ve výchozím nastavení obslužná rutina události použije ID ovládacího prvku pro název metody zpracování událostí:

Výsledná obslužná rutina události bude vypadat takto (v tomto případě v jazyce C#):

Inteligentní odsazení
Když stisknete Enter v prázdném elementu HTML, editor umístí kurzor na správné místo:

Pokud v tomto umístění stisknete Klávesu Enter, přesune se koncová značka dolů a odsadí se tak, aby odpovídala počáteční značce. Kurzor je také odsazený:

Dokončování příkazů Automatické redukce
Seznam IntelliSense v sadě Visual Studio teď filtruje podle toho, co zadáte, aby zobrazoval jenom relevantní možnosti:

IntelliSense také filtruje na základě názvu jednotlivých slov v seznamu IntelliSense. Pokud například zadáte "dl", zobrazí se příkaz dl i asp:DataList:

Tato funkce usnadňuje získání dokončování příkazů pro známé prvky.
JavaScript – editor
Editor JavaScriptu v sadě Visual Studio 2012 Release Candidate je zcela nový a výrazně zlepšuje práci s JavaScriptem v sadě Visual Studio.
Osnova kódu
Pro všechny funkce se teď automaticky vytvoří osnova oblastí, což vám umožní sbalit části souboru, které nejsou relevantní pro váš aktuální fokus.
Párování závorek
Když umístíte kurzor na levou nebo pravou složenou závorku, editor zvýrazní odpovídající závorku.
Přejít na definici
Příkaz Přejít k definici umožňuje přejít ke zdroji funkce nebo proměnné.
Podpora ECMAScript5
Editor podporuje novou syntaxi a rozhraní API v ECMAScript5, nejnovější verzi standardu, která popisuje jazyk JavaScript.
DOM IntelliSense
Vylepšili jsme intelliSense pro rozhraní API PRO DOM s podporou mnoha nových rozhraní API HTML5, mezi které patří querySelector, DOM Storage, zasílání zpráv mezi dokumenty a plátno. Technologie DOM IntelliSense je nyní řízena jedním jednoduchým souborem JavaScriptu, nikoli definicí nativní knihovny typů. To usnadňuje rozšíření nebo nahrazení.
Přetížení podpisu VSDOC
Podrobné komentáře IntelliSense se teď dají deklarovat pro samostatná přetížení funkcí JavaScriptu pomocí nového <elementu podpisu> , jak je znázorněno v tomto příkladu:
function GetOrSet(key, value) {
/// <signature>
/// <summary>Gets the value</summary>
/// <param name="key" type="String">The key to get the value for</param>
/// <returns type="String" />
/// </signature>
/// <signature>
/// <summary>Sets the value</summary>
/// <param name="key" type="String">The key to set the value for</param>
/// <param name="value" type="String">The value to set</param>
/// <returns type="MyLib" />
/// </signature>
if (value) {
values[key] = value;
return this;
} else {
return values[key];
}
}
Implicitní odkazy
Teď můžete přidat soubory JavaScriptu do centrálního seznamu, který bude implicitně zahrnutý do seznamu souborů, které všechny dané soubory JavaScriptu nebo blokové odkazy, což znamená, že pro jeho obsah získáte IntelliSense. Můžete například přidat soubory jQuery do centrálního seznamu souborů a získáte IntelliSense pro funkce jQuery v libovolném bloku souboru JavaScriptu bez ohledu na to, jestli jste na něj odkazovali explicitně (pomocí /// <odkazu /) nebo> ne.
CSS Editor
Dokončování příkazů Automatické redukce
Seznam IntelliSense pro šablony stylů CSS teď filtruje na základě vlastností a hodnot CSS podporovaných vybraným schématem.

IntelliSense také podporuje hledání velkých a malých písmen nadpisů:

Hierarchické odsazení
Editor CSS používá odsazení k zobrazení hierarchických pravidel, která vám poskytne přehled o tom, jak jsou kaskádová pravidla logicky uspořádaná. V následujícím příkladu je #list selektor kaskádovým podřízeným seznamem a je proto odsazený.

Následující příklad ukazuje složitější dědičnost:

Odsazení pravidla je určeno nadřazenými pravidly. Hierarchické odsazení je ve výchozím nastavení povolené, ale můžete ho zakázat v dialogovém okně Možnosti (Nástroje, Možnosti z řádku nabídek):

Podpora hacků css
Analýza stovek souborů CSS z reálného světa ukazuje, že hacky CSS jsou velmi běžné a teď Visual Studio podporuje nejpoužívanější soubory. Tato podpora zahrnuje Technologii IntelliSense a ověření hacků vlastností hvězdičky (*) a podtržítka (_):

Typické hacky selektoru jsou také podporovány, aby hierarchické odsazení bylo zachováno i při jejich použití. Typickým hackem selektoru, který se používá k cílení na Internet Explorer 7, je prepend volič s *:first-child + html. Použití tohoto pravidla zachová hierarchické odsazení:

Schémata specifická pro dodavatele (-moz-, -webkit)
Css3 zavádí mnoho vlastností, které byly implementovány různými prohlížeči v různých časech. To dříve přinutilo vývojáře kódovat pro konkrétní prohlížeče pomocí syntaxe specifické pro dodavatele. Tyto vlastnosti specifické pro prohlížeč jsou nyní součástí technologie IntelliSense.

Podpora komentování a zrušení komentáře
Teď můžete komentovat a odkomentovat pravidla CSS pomocí stejných klávesových zkratek, které používáte v editoru kódu (Ctrl+K,C pro komentář a Ctrl+K, můžete komentář zrušit).
Nástroj pro výběr barvy
V předchozích verzích sady Visual Studio se intelliSense pro atributy související s barvou skládají z rozevíracího seznamu pojmenovaných hodnot barev. Tento seznam byl nahrazen plnohodnotným výběrem barev.
Když zadáte hodnotu barvy, zobrazí se automaticky výběr barvy a zobrazí seznam dříve použitých barev následovaný výchozí paletou barev. Barvu můžete vybrat pomocí myši nebo klávesnice.

Seznam lze rozbalit do úplného výběru barev. Výběr umožňuje ovládat alfa kanál automatickým převodem libovolné barvy na RGBA při přesunutí posuvníku neprůhlednosti:

Fragmenty kódu
Fragmenty kódu v editoru CSS usnadňují a rychleji vytvářet styly napříč prohlížeči. Mnoho vlastností CSS3, které vyžadují nastavení specifické pro prohlížeč, jsou nyní zahrnuté do fragmentů kódu.

Fragmenty kódu CSS podporují pokročilé scénáře (například dotazy na média CSS3) zadáním symbolu at (@), který zobrazuje seznam IntelliSense.

Když vyberete @media hodnotu a stisknete klávesu Tab, editor CSS vloží následující fragment kódu:

Stejně jako u fragmentů kódu můžete vytvářet vlastní fragmenty kódu CSS.
Vlastní oblasti
Pojmenované oblasti kódu, které jsou již k dispozici v editoru kódu, jsou nyní k dispozici pro úpravy CSS. Díky tomu můžete snadno seskupovat související bloky stylů.

Když je oblast sbalená, zobrazí se název oblasti:

Inspektor stránek
Page Inspector je nástroj, který v integrovaném vývojovém prostředí sady Visual Studio vykresluje webovou stránku (HTML, webové formuláře, ASP.NET MVC nebo webové stránky) a umožňuje prozkoumat zdrojový kód i výsledný výstup. U ASP.NET stránek nástroj Page Inspector umožňuje určit, který kód na straně serveru vytvořil kód HTML, který se vykresluje do prohlížeče.

Další informace o nástroji Page Inspector najdete v následujících kurzech:
- Použití Page Inspectoru v ASP.NET MVC
- Použití nástroje Page Inspector ve webových formulářích ASP.NET
Publikování
Profily publikování
V sadě Visual Studio 2010 nejsou informace o publikování pro projekty webových aplikací uložené ve správě verzí a nejsou určené pro sdílení s ostatními. V sadě Visual Studio 2012 Release Candidate byl změněn formát profilu publikování. Vytvořili jsme týmový artefakt a je teď snadné využít sestavení založené na nástroji MSBuild. Informace o konfiguraci sestavení jsou v dialogovém okně Publikovat, abyste před publikováním mohli snadno přepínat konfigurace sestavení.
Profily publikování jsou uloženy ve složce PublishProfiles. Umístění složky závisí na tom, jaký programovací jazyk používáte:
- C#: Properties\PublishProfiles
- Visual Basic: Můj projekt\PublishProfiles
Každý profil je soubor MSBuild. Během publikování se tento soubor naimportuje do souboru MSBuild projektu. Pokud chcete v sadě Visual Studio 2010 provést změny procesu publikování nebo balíčku, musíte vlastní nastavení umístit do souboru s názvem ProjectName.wpp.targets. Tato možnost je stále podporovaná, ale teď můžete vlastní nastavení vložit do samotného profilu publikování. Tímto způsobem se vlastní nastavení použijí jenom pro tento profil.
Nyní můžete využít také profily publikování z nástroje MSBuild. K tomu použijte následující příkaz při sestavování projektu:
msbuild.exe project.csproj /t:WebPublish /p:PublishProfile=ProfileName
Hodnota project.csproj je cesta k projektu a ProfileName je název profilu, který se má publikovat. Případně můžete místo předání názvu profilu pro vlastnost PublishProfile předat úplnou cestu k profilu publikování.
ASP.NET předkompilace a sloučení
Pro projekty webových aplikací přidá Visual Studio 2012 Release Candidate možnost na stránce vlastností Package/Publish Web, která umožňuje předkompilovat a sloučit obsah webu při publikování nebo zabalení projektu. Pokud chcete tyto možnosti zobrazit, klikněte pravým tlačítkem myši na projekt v Průzkumník řešení, zvolte Vlastnosti a pak zvolte stránku vlastností Package/Publish Web. Následující obrázek znázorňuje předkompilování této aplikace před publikováním.

Když vyberete tuto možnost, visual Studio aplikaci předkompiliuje pokaždé, když webovou aplikaci publikujete nebo zabalíte. Pokud chcete řídit, jak je web předkompilován nebo jak jsou sestavení sloučena, klikněte na tlačítko Upřesnit a nakonfigurujte tyto možnosti.
IIS Express
Výchozím webovým serverem pro testování webových projektů v sadě Visual Studio je teď služba IIS Express. Vývojový server sady Visual Studio je stále možností pro místní webový server během vývoje, ale služba IIS Express je nyní doporučeným serverem. Prostředí používání služby IIS Express v sadě Visual Studio 11 Beta je velmi podobné použití v sadě Visual Studio 2010 SP1.
Právní doložka
Toto je předběžný dokument, který může být podstatně změněn před konečným komerčním vydáním softwaru popsaného zde.
Informace obsažené v tomto dokumentu představují aktuální pohled společnosti Microsoft Corporation na otázky popsané k datu zveřejnění. Vzhledem k tomu, že Společnost Microsoft musí reagovat na měnící se tržní podmínky, neměla by být interpretována jako závazek na straně společnosti Microsoft a společnost Microsoft nemůže zaručit přesnost jakýchkoli informací uvedených po datu zveřejnění.
Tento dokument White Paper je určen pouze pro informační účely. SPOLEČNOST MICROSOFT NEPOSKYTUJE ŽÁDNÉ ZÁRUKY, VÝSLOVNÉ, PŘEDPOKLÁDANÉ NEBO ZÁKONNÉ, POKUD JDE O INFORMACE V TOMTO DOKUMENTU.
Dodržování všech příslušných zákonů o autorských právech je odpovědností uživatele. Bez omezení práv podle autorských práv nesmí být žádná část tohoto dokumentu reprodukována, uložena nebo zavedena do systému načítání nebo přenášena v libovolné podobě nebo jakýmkoli způsobem (elektronickým, mechanickým, fotokopií, záznamem nebo jinak) nebo pro jakýkoli účel bez výslovného písemného svolení společnosti Microsoft Corporation.
Microsoft může mít patenty, patentové aplikace, ochranné známky, autorská práva nebo jiná práva duševního vlastnictví, která se týkají předmětu tohoto dokumentu. S výjimkou výslovně uvedených v jakékoli písemné licenční smlouvě od Microsoftu vám vybavení tohoto dokumentu neposkytuje žádnou licenci na tyto patenty, ochranné známky, autorská práva nebo jiné duševní vlastnictví.
Pokud není uvedeno jinak, jsou ukázkové společnosti, organizace, produkty, názvy domén, e-mailové adresy, loga, lidé, místa a události, které jsou zde uvedené, fiktivní a žádná asociace s žádnou skutečnou společností, organizací, produktem, názvem domény, e-mailovou adresou, logem, osobou, místem nebo událostí je zamýšlená nebo by měla být odvozena.
© 2012 Microsoft Corporation. Všechna práva vyhrazena.
Microsoft a Windows jsou registrované ochranné známky nebo ochranné známky společnosti Microsoft Corporation v USA a/nebo v jiných zemích.
Názvy skutečných společností a produktů uvedených zde mohou být ochranné známky příslušných vlastníků.