Megosztás a következőn keresztül:


WCF-szolgáltatások és ASP.NET

Ez a témakör a Windows Communication Foundation (WCF) szolgáltatásainak ASP.NET és ASP.NET kompatibilitási módban történő üzemeltetését ismerteti.

WCF üzemeltetése egymás mellett ASP.NET

Az Internet Information Servicesben (IIS) üzemeltetett WCF-szolgáltatások a következőkkel találhatók: . ASPX-lapok és ASMX-webszolgáltatások egyetlen, közös alkalmazástartományon belül. ASP.NET olyan általános infrastruktúra-szolgáltatásokat biztosít, mint az AppDomain-felügyelet és a dinamikus fordítás a WCF-hez és a ASP.NET HTTP-futtatókörnyezethez. A WCF alapértelmezett konfigurációja egymás mellett ASP.NET.

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

A ASP.NET HTTP-futtatókörnyezet kezeli ASP.NET kéréseket, de nem vesz részt a WCF-szolgáltatásokra irányuló kérések feldolgozásában, annak ellenére, hogy ezek a szolgáltatások ugyanabban az AppDomainben vannak üzemeltetve, mint a ASP.NET tartalom. Ehelyett a WCF szolgáltatásmodell elfogja a WCF-szolgáltatásoknak címzett üzeneteket, és átirányítja őket a WCF átviteli/csatornaveremen keresztül.

Az egymás melletti modell eredményei a következők:

  • ASP.NET és WCF-szolgáltatások megoszthatják az AppDomain állapotát. Mivel a két keretrendszer együtt létezhet ugyanabban az AppDomainben, a WCF az AppDomain állapotát is megoszthatja ASP.NET (beleértve a statikus változókat, eseményeket stb.).

  • A WCF-szolgáltatások következetesen viselkednek, függetlenül az üzemeltetési környezet és a szállítástól. A ASP.NET HTTP-futtatókörnyezet szándékosan kapcsolódik az IIS/ASP.NET üzemeltetési környezethez és a HTTP-kommunikációhoz. Ezzel szemben a WCF úgy lett kialakítva, hogy konzisztensen viselkedjen az üzemeltetési környezetekben (a WCF az IIS-en belül és kívül egyaránt következetesen viselkedik) és az átvitelen (az IIS 7.0-s és újabb verzióiban üzemeltetett szolgáltatások konzisztens viselkedést tanúsítanak az összes általa közzétett végponton, még akkor is, ha egyes végpontok nem HTTP protokollt használnak).

  • Az AppDomainben a HTTP-futtatókörnyezet által implementált funkciók ASP.NET tartalomra vonatkoznak, a WCF-re azonban nem. A ASP.NET alkalmazásplatform számos HTTP-specifikus funkciója nem vonatkozik a ASP.NET tartalmat tartalmazó AppDomainben üzemeltetett WCF-szolgáltatásokra. Ilyen funkciók például a következők:

    • HttpContext: Current mindig null egy WCF-szolgáltatásból érhető el. A RequestContext használható helyette.

    • Fájlalapú engedélyezés: A WCF biztonsági modell nem engedélyezi a szolgáltatás .svc fájljára alkalmazott hozzáférés-vezérlési listát (ACL) a szolgáltatás kérésének engedélyezésekor.

    • Konfigurációalapú URL-engedélyezés: Hasonlóképpen, a WCF biztonsági modell nem tartja be a System.Web engedélyezési> konfigurációs <elemében megadott URL-alapú engedélyezési szabályokat. Ezek a beállítások figyelmen kívül lesznek hagyva a WCF-kérelmek esetében, ha egy szolgáltatás az ASP.NET URL-engedélyezési szabályai által védett URL-területen található.

    • HttpModule bővíthetőség: A WCF üzemeltetési infrastruktúrája elfogja a WCF-kéréseket az PostAuthenticateRequest esemény létrehozásakor, és nem adja vissza a feldolgozást a ASP.NET HTTP-folyamatnak. A folyamat későbbi szakaszaiban a kérelmek elfogására kódolt modulok nem fogják el a WCF-kéréseket.

    • ASP.NET megszemélyesítés: Alapértelmezés szerint a WCF-kérések mindig IIS-folyamatidentitásként futnak, még akkor is, ha ASP.NET úgy van beállítva, hogy engedélyezze a megszemélyesítést a System.Web <identitás-megszemélyesítési="true" /> konfigurációs lehetőségével.

Ezek a korlátozások csak az IIS-alkalmazásban üzemeltetett WCF-szolgáltatásokra vonatkoznak. A WCF jelenléte nem befolyásolja ASP.NET tartalom viselkedését.

Azok a WCF-alkalmazások, amelyek a HTTP-folyamat által hagyományosan biztosított funkciókat igényelnek, érdemes megfontolni a WCF-ekvivalensek használatát, amelyek gazdagéptől és átviteltől függetlenek:

Azt is megteheti, hogy a szolgáltatásokat a WCF ASP.NET kompatibilitási módban futtatja.

WCF-szolgáltatások üzemeltetése ASP.NET kompatibilitási módban

Bár a WCF-modell úgy lett kialakítva, hogy következetesen viselkedjen az üzemeltetési környezetekben és a szállításokban, gyakran előfordul, hogy egy alkalmazás nem igényel ilyen fokú rugalmasságot. A WCF ASP.NET kompatibilitási módja olyan helyzetekre alkalmas, amelyek nem igénylik az IIS-en kívüli gazdagépek üzemeltetését vagy a HTTP-n kívüli protokollokon keresztüli kommunikációt, de a ASP.NET webalkalmazás-platform összes funkcióját használják.

Az alapértelmezett, egymás melletti konfigurációval ellentétben, ahol a WCF üzemeltetési infrastruktúrája elfogja a WCF-üzeneteket, és átirányítja őket a HTTP-folyamatból, a ASP.NET kompatibilitási módban futó WCF-szolgáltatások teljes mértékben részt vesznek a ASP.NET HTTP-kérések életciklusában. Kompatibilitási módban a WCF-szolgáltatások a HTTP-folyamatot implementáción IHttpHandler keresztül használják, hasonlóan az ASPX-lapokra és az ASMX-webszolgáltatásokra vonatkozó kérelmek kezeléséhez. Ennek eredményeként a WCF az ASMX-hez hasonlóan viselkedik a következő ASP.NET funkciók tekintetében:

  • HttpContext: A ASP.NET kompatibilitási módban futó WCF-szolgáltatások hozzáférhetnek Current és a társított állapotukhoz.

  • Fájlalapú engedélyezés: A ASP.NET kompatibilitási módban futó WCF-szolgáltatások biztonságosak lehetnek, ha fájlrendszer-hozzáférés-vezérlési listákat (ACL-eket) csatolnak a szolgáltatás .svc fájlhoz.

  • Konfigurálható URL-engedélyezés: Az ASP.NET URL-engedélyezési szabályai kikényszeríthetők a WCF-kérelmekhez, ha a WCF szolgáltatás ASP.NET kompatibilitási módban fut.

  • HttpModuleCollection bővíthetőség: Mivel a ASP.NET kompatibilitási módban futó WCF-szolgáltatások teljes mértékben részt vesznek a ASP.NET HTTP-kérések életciklusában, a HTTP-folyamatban konfigurált HTTP-modulok képesek a WCF-kérelmeken a szolgáltatáshívás előtt és után is működni.

  • ASP.NET megszemélyesítés: A WCF-szolgáltatások a ASP.NET megszemélyesített szál aktuális identitásával futnak, ami eltérhet az IIS-folyamat identitásától, ha ASP.NET megszemélyesítés engedélyezve van az alkalmazás számára. Ha ASP.NET megszemélyesítés és a WCF-megszemélyesítés is engedélyezve van egy adott szolgáltatásművelethez, a szolgáltatásvégrehajtás végül a WCF-ből beszerzett identitással fut.

A WCF ASP.NET kompatibilitási módja az alkalmazás szintjén engedélyezve van az alábbi konfiguráción keresztül (az alkalmazás Web.config fájljában található):

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

Ez az érték alapértelmezés szerint az false , ha nincs megadva. Az érték false azt jelzi, hogy az alkalmazásban futó ÖSSZES WCF-szolgáltatás nem ASP.NET kompatibilitási módban fog futni.

Mivel ASP.NET kompatibilitási mód olyan kérésfeldolgozási szemantikát jelent, amely alapvetően eltér a WCF alapértelmezettétől, az egyes szolgáltatás-implementációk szabályozhatják, hogy egy olyan alkalmazáson belül futnak-e, amelyhez engedélyezve van a ASP.NET kompatibilitási mód. A szolgáltatások a AspNetCompatibilityRequirementsAttribute segítségével jelezhetik, hogy támogatják-e ASP.NET kompatibilitási módot. Az attribútum alapértelmezett értéke Allowed.

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

Az alábbi táblázat bemutatja, hogyan működik az alkalmazásszintű kompatibilitási mód beállítása az egyes szolgáltatások megadott támogatási szintjével:

Alkalmazásszintű kompatibilitási mód beállítása [AspNetCompatibilityRequirementsMode]

Beállítás
Megfigyelt eredmény
aspNetCompatibilityEnabled = "true" Required A szolgáltatás sikeresen aktiválódik.
aspNetCompatibilityEnabled = "true" Allowed A szolgáltatás sikeresen aktiválódik.
aspNetCompatibilityEnabled = "true" NotAllowed Aktiválási hiba történik, amikor a szolgáltatás üzenetet kap.
aspNetCompatibilityEnabled = "false" Required Aktiválási hiba történik, amikor a szolgáltatás üzenetet kap.
aspNetCompatibilityEnabled = "false" Allowed A szolgáltatás sikeresen aktiválódik.
aspNetCompatibilityEnabled = "false" NotAllowed A szolgáltatás sikeresen aktiválódik.

Feljegyzés

Az IIS 7.0 és a WAS lehetővé teszi, hogy a WCF-szolgáltatások a HTTP-n kívül más protokollon keresztül kommunikáljanak. A ASP.NET kompatibilitási módot engedélyező alkalmazásokban futó WCF-szolgáltatások azonban nem tehetnek közzé nem HTTP-végpontokat. Egy ilyen konfiguráció aktiválási kivételt hoz létre, amikor a szolgáltatás megkapja az első üzenetét.

A WCF-szolgáltatások ASP.NET kompatibilitási módjának engedélyezéséről további információt a ASP.NET kompatibilitási mintában találAspNetCompatibilityRequirementsMode.

Lásd még