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.
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:
OperationContext helyett HttpContext.
ServiceAuthorizationBehavior az ASP.NET fájl-/URL-engedélyezése helyett.
IDispatchMessageInspector vagy egyéni rétegzett csatornákat HTTP-modulok helyett.
Megszemélyesítés minden művelethez a System.Web megszemélyesítése helyett a WCF használatával.
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.