Sdílet prostřednictvím


Začínáme se specifikací OWIN a sadou Katana

Open Web Interface for .NET (OWIN) definuje abstrakci mezi webovými servery .NET a webovými aplikacemi. Díky oddělení webového serveru od aplikace usnadňuje OWIN vytváření middlewaru pro vývoj webů .NET. OWIN také usnadňuje přenos webových aplikací na jiné hostitele – například samoobslužné hostování ve službě Windows nebo jiném procesu.

OWIN je specifikace vlastněná komunitou, nikoli implementace. Projekt Katana je sada opensourcových komponent OWIN vyvinutých Microsoftem. Obecný přehled o OWIN a Kataně najdete v tématu Přehled projektu Katana. V tomto článku přejdu rovnou do kódu, abychom mohli začít.

Tento kurz používá Visual Studio 2013 Release Candidate, ale můžete použít i Visual Studio 2012. Několik kroků se v sadě Visual Studio 2012 liší, což si všimněte níže.

Hostování OWIN ve službě IIS

V této části budeme hostovat OWIN ve službě IIS. Tato možnost poskytuje flexibilitu a kompozibilnost kanálu OWIN společně se sadou vyspělých funkcí služby IIS. Při použití této možnosti se aplikace OWIN spustí v kanálu požadavků ASP.NET.

Nejprve vytvořte nový projekt webové aplikace ASP.NET. (V sadě Visual Studio 2012 použijte typ projektu ASP.NET Prázdná webová aplikace.)

Obrázek nového projektu ASP.NET

V dialogovém okně Nový projekt ASP.NET vyberte šablonu Prázdný .

Příklad obrázku

Přidání balíčků NuGet

Dále přidejte požadované balíčky NuGet. V nabídce Nástroje vyberte Správce balíčků NuGet a pak vyberte Konzola Správce balíčků. V okně Konzola Správce balíčků zadejte následující příkaz:

install-package Microsoft.Owin.Host.SystemWeb –Pre

Instalace Správce balíčků, příklad obrázku

Přidání třídy po spuštění

Dále přidejte spouštěcí třídu OWIN. V Průzkumník řešení klikněte pravým tlačítkem na projekt, vyberte Přidat a pak vyberte Nová položka. V dialogovém okně Add New Item (Přidat novou položku) vyberte Owin Startup class (Spouštěcí třída Owin). Další informace o konfiguraci spouštěcí třídy najdete v tématu Detekce třídy spouštění OWIN.

Přidání příkladu třídy Po spuštění

Do metody Startup1.Configuration přidejte následující kód:

public void Configuration(IAppBuilder app)
{
    // New code:
    app.Run(context =>
    {
        context.Response.ContentType = "text/plain";
        return context.Response.WriteAsync("Hello, world.");
    });
}

Tento kód přidá do kanálu OWIN jednoduchou část middlewaru implementovanou jako funkci, která přijímá instanci Microsoft.Owin.IOwinContext . Když server obdrží požadavek HTTP, kanál OWIN vyvolá middleware. Middleware nastaví typ obsahu odpovědi a zapíše text odpovědi.

Poznámka

Šablona třídy OWIN Startup je k dispozici v Visual Studio 2013. Pokud používáte Visual Studio 2012, stačí přidat novou prázdnou třídu s názvem Startup1a vložit následující kód:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(OwinApp.Startup1))]

namespace OwinApp
{
    public class Startup1
    {
        public void Configuration(IAppBuilder app)
        {
          app.Run(context =>
          {
              context.Response.ContentType = "text/plain";
              return context.Response.WriteAsync("Hello, world.");
          });
        }
    }
}

Spuštění aplikace

Stisknutím klávesy F5 spusťte ladění. Visual Studio otevře okno prohlížeče pro http://localhost:*port*/. Stránka by měla vypadat takto:

Obrázek úspěšného načtení stránky

Self-Host OWIN v konzolové aplikaci

Tuto aplikaci můžete snadno převést z hostování služby IIS na vlastní hostování ve vlastním procesu. Při hostování služby IIS služba IIS funguje jako server HTTP i jako proces, který službu hostuje. V případě místního hostování vaše aplikace vytvoří proces a jako server HTTP použije třídu HttpListener .

V sadě Visual Studio vytvořte novou konzolovou aplikaci. V okně Konzola Správce balíčků zadejte následující příkaz:

Install-Package Microsoft.Owin.SelfHost -Pre

Přidejte do Startup1 projektu třídu z 1. části tohoto kurzu. Tuto třídu nemusíte upravovat.

Následujícím způsobem implementujte metodu Main aplikace.

class Program
{
    static void Main(string[] args)
    {
        using (Microsoft.Owin.Hosting.WebApp.Start<Startup1>("http://localhost:9000"))
        {
            Console.WriteLine("Press [enter] to quit...");
            Console.ReadLine();
        }
    }
}

Když spustíte konzolovou aplikaci, server začne naslouchat .http://localhost:9000 Pokud na tuto adresu přejdete ve webovém prohlížeči, zobrazí se stránka "Hello world".

Příklad naslouchajícího obrázku konzoly

Přidání diagnostiky OWIN

Balíček Microsoft.Owin.Diagnostics obsahuje middleware, který zachytává neošetřené výjimky a zobrazuje stránku HTML s podrobnostmi o chybě. Tato stránka funguje podobně jako ASP.NET chybová stránka, která se někdy označuje jako "žlutá obrazovka smrti" (YSOD). Podobně jako v případě YSOD je i chybová stránka Katana užitečná během vývoje, ale doporučuje se ji zakázat v produkčním režimu.

Pokud chcete do projektu nainstalovat diagnostický balíček, zadejte do okna konzoly Správce balíčků následující příkaz:

install-package Microsoft.Owin.Diagnostics –Pre

Změňte Startup1.Configuration kód v metodě následujícím způsobem:

public void Configuration(IAppBuilder app)
{
    // New code: Add the error page middleware to the pipeline. 
    app.UseErrorPage();

    app.Run(context =>
    {
        // New code: Throw an exception for this URI path.
        if (context.Request.Path.Equals(new PathString("/fail")))
        {
            throw new Exception("Random exception");
        }

        context.Response.ContentType = "text/plain";
        return context.Response.WriteAsync("Hello, world.");
    });
}

Teď pomocí kombinace kláves CTRL+F5 spusťte aplikaci bez ladění, aby při výjimce nedošlo k přerušení sady Visual Studio. Aplikace se chová stejně jako předtím, dokud nepřecháte na http://localhost/failadresu . V tomto okamžiku aplikace vyvolá výjimku. Middleware chybové stránky výjimku zachytí a zobrazí stránku HTML s informacemi o chybě. Kliknutím na karty můžete zobrazit zásobník, řetězec dotazu, soubory cookie, hlavičku požadavku a proměnné prostředí OWIN.

Random exeption image example

Další kroky