Služby WCF a ASP.NET

Toto téma popisuje hostování služeb Wcf (Windows Communication Foundation) vedle ASP.NET a jejich hostování v režimu kompatibility ASP.NET.

Hostování WCF vedle ASP.NET

Služby WCF hostované v Internetová informační služba (IIS) mohou být umístěny s . Stránky ASPX a webové služby ASMX uvnitř jedné společné domény aplikace. ASP.NET poskytuje běžné služby infrastruktury, jako je správa AppDomain a dynamická kompilace pro WCF i modul runtime ASP.NET HTTP. Výchozí konfigurace wcf je vedle ASP.NET.

Screenshot showing WCF Services and ASP .NET: sharing state.

Modul runtime ASP.NET HTTP zpracovává ASP.NET požadavky, ale neúčastní se zpracování požadavků určených pro služby WCF, i když jsou tyto služby hostované ve stejné doméně AppDomain, jako je obsah ASP.NET. Místo toho model služby WCF zachycuje zprávy adresované službám WCF a směruje je prostřednictvím zásobníku přenosu/kanálu WCF.

Výsledky modelu vedle sebe jsou následující:

  • ASP.NET a služby WCF můžou sdílet stav AppDomain. Vzhledem k tomu, že obě architektury mohou existovat ve stejné doméně AppDomain, wcf může také sdílet stav AppDomain s ASP.NET (včetně statických proměnných, událostí atd.).

  • Služby WCF se chovají konzistentně nezávisle na hostitelském prostředí a přenosu. Modul runtime ASP.NET HTTP je záměrně svázán s hostitelským prostředím SLUŽBY IIS/ASP.NET a komunikací HTTP. Wcf je naopak navržený tak, aby se choval konzistentně napříč hostitelskými prostředími (WCF se chová konzistentně uvnitř i mimo službu IIS) a napříč přenosem (služba hostovaná ve službě IIS 7.0 a novější má konzistentní chování ve všech koncových bodech, které zveřejňuje, i když některé z těchto koncových bodů používají jiné protokoly než HTTP).

  • V rámci appDomain se funkce implementované modulem runtime HTTP vztahují na ASP.NET obsah, ale ne na WCF. Mnoho funkcí specifických pro PROTOKOL HTTP aplikační platformy ASP.NET se nevztahuje na služby WCF hostované uvnitř domény AppDomain, která obsahuje ASP.NET obsah. Mezi příklady těchto funkcí patří:

    • HttpContext: Current je vždy null při přístupu ze služby WCF. Místo toho použijte RequestContext.

    • Autorizace založená na souborech: Model zabezpečení WCF neumožňuje seznam řízení přístupu (ACL) použitý u souboru .svc služby při rozhodování o autorizaci žádosti o službu.

    • Autorizace adresy URL založená na konfiguraci: Model zabezpečení WCF neodpovídá žádným autorizačním pravidlům založeným na adrese URL zadaným v elementu <konfigurace autorizace> system.Web. Tato nastavení se u požadavků WCF ignorují, pokud se služba nachází v prostoru adresy URL zabezpečeném autorizačními pravidly adresy URL asp.NET.

    • Rozšiřitelnost protokolu HttpModule: Infrastruktura hostování WCF zachycuje požadavky WCF při PostAuthenticateRequest vyvolání události a nevrací zpracování do ASP.NET kanálu HTTP. Moduly, které jsou kódované tak, aby zachycovaly požadavky v pozdějších fázích kanálu, nezachycují požadavky WCF.

    • ASP.NET zosobnění: Ve výchozím nastavení se požadavky WCF vždy spouští jako identita procesu SLUŽBY IIS, i když je ASP.NET nastavená tak, aby umožňovala zosobnění pomocí možnosti zosobnění identity System.Web <="true" /> možnost konfigurace.

Tato omezení se vztahují pouze na služby WCF hostované v aplikaci SLUŽBY IIS. Chování ASP.NET obsahu není ovlivněno přítomností WCF.

Aplikace WCF, které tradičně poskytují funkce poskytované kanálem HTTP, by měly zvážit použití ekvivalentů WCF, které jsou nezávislé na hostiteli a přenosu:

Alternativně můžete zvážit spuštění služeb v ASP.NET režimu kompatibility WCF.

Hostování služeb WCF v režimu kompatibility ASP.NET

I když je model WCF navržený tak, aby se choval konzistentně napříč hostitelskými prostředími a přenosy, často existují scénáře, kdy aplikace nevyžaduje tento stupeň flexibility. Režim kompatibility ASP.NET WCF je vhodný pro scénáře, které nevyžadují možnost hostovat mimo službu IIS nebo komunikovat přes jiné protokoly než HTTP, ale používají všechny funkce platformy webových aplikací ASP.NET.

Na rozdíl od výchozí konfigurace vedle sebe, kde hostující infrastruktura WCF zachycuje zprávy WCF a směruje je mimo kanál HTTP, služby WCF spuštěné v režimu kompatibility ASP.NET se plně účastní životního cyklu ASP.NET požadavků HTTP. V režimu kompatibility služby WCF používají kanál HTTP prostřednictvím IHttpHandler implementace, podobně jako požadavky na stránky ASPX a webové služby ASMX. V důsledku toho se WCF chová stejně jako ASMX s ohledem na následující funkce ASP.NET:

  • HttpContext: Služby WCF spuštěné v režimu kompatibility ASP.NET mají přístup a Current jeho přidružený stav.

  • Autorizace založená na souborech: Služby WCF spuštěné v režimu kompatibility ASP.NET můžou být zabezpečené připojením seznamů řízení přístupu (ACL) systému souborů k souboru .svc služby.

  • Konfigurovatelná autorizace adresy URL: Autorizační pravidla adresy URL TECHNOLOGIE ASP.NET se vynucují pro požadavky WCF, když je služba WCF spuštěná v režimu kompatibility ASP.NET.

  • HttpModuleCollection rozšiřitelnost: Vzhledem k tomu, že služby WCF spuštěné v režimu kompatibility ASP.NET se plně účastní životního cyklu požadavků HTTP ASP.NET protokolu HTTP, všechny moduly HTTP nakonfigurované v kanálu HTTP můžou pracovat s požadavky WCF před i po vyvolání služby.

  • ASP.NET zosobnění: Služby WCF se spouštějí pomocí aktuální identity zosobněného vlákna ASP.NET, která se může lišit od identity procesu služby IIS, pokud je pro aplikaci povolená ASP.NET zosobnění. Pokud jsou pro konkrétní operaci služby povolené ASP.NET zosobnění i zosobnění WCF, implementace služby nakonec spustí identitu získanou ze služby WCF.

Režim kompatibility ASP.NET WCF je povolen na úrovni aplikace prostřednictvím následující konfigurace (nachází se v souboru Web.config aplikace):

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

Tato hodnota je false výchozí, pokud není zadána. Hodnota false označuje, že všechny služby WCF spuštěné v aplikaci nebudou spuštěny v režimu kompatibility ASP.NET.

Vzhledem k tomu, že ASP.NET režim kompatibility znamená sémantiku zpracování požadavků, která se zásadně liší od výchozího nastavení WCF, mají jednotlivé implementace služeb možnost řídit, zda běží uvnitř aplikace, pro kterou byl povolen režim kompatibility ASP.NET. Služby můžou použít AspNetCompatibilityRequirementsAttribute k označení, jestli podporují režim kompatibility ASP.NET. Výchozí hodnota pro tento atribut je Allowed.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CalculatorService : ICalculatorSession
{//Implement calculator service methods.}

Následující tabulka ukazuje, jak nastavení režimu kompatibility pro celou aplikaci komunikuje se stavovou úrovní podpory jednotlivých služeb:

Nastavení režimu kompatibility pro celou aplikaci [AspNetCompatibilityRequirementsMode]

Nastavení
Pozorovaný výsledek
aspNetCompatibilityEnabled = "true" Required Služba se úspěšně aktivuje.
aspNetCompatibilityEnabled = "true" Allowed Služba se úspěšně aktivuje.
aspNetCompatibilityEnabled = "true" NotAllowed K chybě aktivace dojde, když služba obdrží zprávu.
aspNetCompatibilityEnabled = "false" Required K chybě aktivace dojde, když služba obdrží zprávu.
aspNetCompatibilityEnabled = "false" Allowed Služba se úspěšně aktivuje.
aspNetCompatibilityEnabled = "false" NotAllowed Služba se úspěšně aktivuje.

Poznámka:

Služba IIS 7.0 a WAS umožňuje službám WCF komunikovat přes jiné protokoly než HTTP. Služby WCF spuštěné v aplikacích s povoleným režimem kompatibility ASP.NET však nejsou povoleny k zveřejnění koncových bodů jiného typu než HTTP. Tato konfigurace vygeneruje výjimku aktivace, když služba obdrží první zprávu.

Další informace o povolení režimu kompatibility ASP.NET pro služby WCF najdete AspNetCompatibilityRequirementsMode v ukázce kompatibility ASP.NET .

Viz také