WCF-Dienste und ASP.NETWCF Services and ASP.NET

Dieses Thema erläutert hosting Windows Communication Foundation (WCF) Services Seite-an-Seite mit ASP.NET und das Hosten dieser im ASP.NET-Kompatibilitätsmodus.This topic discusses hosting Windows Communication Foundation (WCF) services side-by-side with ASP.NET and hosting them in ASP.NET compatibility mode.

Paralleles Hosten in WCF und in ASP.NETHosting WCF Side-by-Side with ASP.NET

In IIS (Internetinformationsdienste) gehosteten WCF-Dienste können sich befinden. ASPX-Seiten und ASMX-Webdiensten in einem einzelnen, gemeinsamen Anwendungsdomäne.WCF services hosted in Internet Information Services (IIS) can be located with .ASPX pages and ASMX Web services inside of a single, common Application Domain. ASP.NET bietet allgemeine Infrastrukturdienste, wie etwa AppDomain-Verwaltung und der dynamischen Kompilierung für WCF und die ASP.NET-HTTP-Laufzeit.ASP.NET provides common infrastructure services such as AppDomain management and dynamic compilation for both WCF and the ASP.NET HTTP runtime. Die Standardkonfiguration für WCF wird Seite-an-Seite mit ASP.NET.The default configuration for WCF is side-by-side with ASP.NET.

WCF-Dienste und ASP .NET:: Freigeben von ZuständenWCF Services and ASP .NET: sharing state

Die ASP.NET-HTTP-Laufzeit ASP.NET-Anforderungen behandelt, aber nicht Teil der Verarbeitung von Anforderungen, die für WCF-Dienste gerichtet, obwohl diese Dienste in der gleichen AppDomain gehostet werden, da ASP.NET Inhalt ist.The ASP.NET HTTP runtime handles ASP.NET requests but does not participate in the processing of requests destined for WCF services, even though these services are hosted in the same AppDomain as is the ASP.NET content. Stattdessen des WCF-Dienstmodells fängt der WCF-Diensten adressierte Nachrichten ab und leitet sie durch die WCF-Transport-/Kanalstapel.Instead, the WCF Service Model intercepts messages addressed to WCF services and routes them through the WCF transport/channel stack.

Die Ergebnisse des parallelen Modells sind folgende:The results of the side-by-side model are as follows:

  • ASP.NET und WCF-Dienste können AppDomain-Zustand gemeinsam verwenden.ASP.NET and WCF services can share AppDomain state. Da die beiden Frameworks in derselben AppDomain koexistieren können, kann WCF auch AppDomain-Zustand mit ASP.NET (einschließlich statischen Variablen, Ereignisse usw.) freigeben.Because the two frameworks can coexist in the same AppDomain, WCF can also share AppDomain state with ASP.NET (including static variables, events, and so on).

  • WCF-Dienste Verhalten einheitlich, unabhängig von hostumgebung und Transport.WCF services behave consistently, independent of hosting environment and transport. Die ASP.NET-HTTP-Laufzeit ist absichtlich an IIS/ASP.NET-Hostumgebung und HTTP-Kommunikation gekoppelt.The ASP.NET HTTP runtime is intentionally coupled to the IIS/ASP.NET hosting environment and HTTP communication. Im Gegensatz dazu dient WCF für konsistentes Verhalten in Hostumgebungen (WCF verhält sich konsistent, sowohl innerhalb und außerhalb von IIS) und für Transporte (ein Diensts in IIS 7.0 und höher gehosteter verhält sich konsistent für alle Endpunkte, die es bereitstellt, auch wenn Einige dieser Endpunkte verwenden andere Protokolle als HTTP).Conversely, WCF is designed to behave consistently across hosting environments (WCF behaves consistently both inside and outside of IIS) and across transport (a service hosted in IIS 7.0 and later has consistent behavior across all endpoints it exposes, even if some of those endpoints use protocols other than HTTP).

  • Innerhalb einer AppDomain gelten von der HTTP-Laufzeit implementierte Funktionen ASP.NET-Inhalt, aber nicht für WCF.Within an AppDomain, features implemented by the HTTP runtime apply to ASP.NET content but not to WCF. Viele HTTP-spezifischen Funktionen der ASP.NET-Anwendungsplattform gelten nicht für WCF-Dienste, die in einer AppDomain, die ASP.NET-Inhalt enthält gehostet.Many HTTP-specific features of the ASP.NET application platform do not apply to WCF Services hosted inside of an AppDomain that contains ASP.NET content. Im Folgenden sind Beispiele für diese Funktionen aufgeführt:Examples of these features include the following:

    • HttpContext: Current ist immer null Wenn der Zugriff innerhalb eines WCF-Diensts.HttpContext: Current is always null when accessed from within a WCF service. Verwendung RequestContext stattdessen.Use RequestContext instead.

    • Dateibasierte Autorisierung: den WCF-Sicherheitsmodell lässt sich nicht für die Zugriffssteuerungsliste (ACL) auf die SVC-Datei des Diensts angewendet werden, wenn Sie entscheiden, ob eine dienstanforderung autorisiert ist.File-based authorization: The WCF security model does not allow for the access control list (ACL) applied to the .svc file of the service when deciding if a service request is authorized.

    • Konfigurationsbasierte URL-Autorisierung: Entsprechend der WCF-Sicherheitsmodell nicht auf reduzierbar in System.Web angegebene URL-basierten Autorisierungsregeln <Authorization >-Konfigurationselement.Configuration-based URL Authorization: Similarly, the WCF security model does not adhere to any URL-based authorization rules specified in System.Web’s <authorization> configuration element. Diese Einstellungen sind für WCF-Anforderungen ignoriert, wenn ein Dienst in einem URL-Namespace, die von ASP gesichert befindet. NET URL-Autorisierungsregeln.These settings are ignored for WCF requests if a service resides in a URL space secured by ASP.NET’s URL authorization rules.

    • HttpModule-Erweiterbarkeit: den WCF--Hostinfrastruktur fängt WCF anfordert, wenn die PostAuthenticateRequest -Ereignis ausgelöst wird und die Verarbeitung nicht an der ASP.NET-HTTP-Pipeline zurück.HttpModule extensibility: The WCF hosting infrastructure intercepts WCF requests when the PostAuthenticateRequest event is raised and does not return processing to the ASP.NET HTTP pipeline. Module, die zum Abfangen von Anforderungen in späteren Phasen der Pipeline codiert sind werden WCF-Anforderungen nicht abgefangen werden.Modules that are coded to intercept requests at later stages of the pipeline do not intercept WCF requests.

    • ASP.NET-Identitätswechsel: standardmäßig WCF angewiesen immer ausgeführt wird wie IIS die Identität, verarbeiten, auch wenn ASP.NET festgelegt ist, können Sie mithilfe des System.Web-Identitätswechsel aktivieren <Identität = "true" / > Konfigurationsoption.ASP.NET impersonation: By default, WCF requests always runs as the IIS process identity, even if ASP.NET is set to enable impersonation using System.Web’s <identity impersonate="true" /> configuration option.

Diese Einschränkungen gelten nur für in IIS gehostete WCF-Dienste.These restrictions apply only to WCF services hosted in IIS application. Das Verhalten des ASP.NET-Inhalts wird durch das Vorhandensein von WCF nicht beeinflusst.The behavior of ASP.NET content is not affected by the presence of WCF.

WCF-Anwendungen, die Funktionalität von der HTTP-Pipeline erfordern sollten mit den WCF-äquivalente, Host und transport unabhängig:WCF applications that require functionality traditionally provided by the HTTP pipeline should consider using the WCF equivalents, which are host and transport independent:

Alternativ können Sie erwägen, Ihre Dienste im ASP.NET-Kompatibilitätsmodus von WCF ausgeführt.Alternatively, you can consider running your services in WCF’s ASP.NET compatibility mode.

Hosten von WCF-Diensten im ASP.NET-KompatibilitätsmodusHosting WCF Services in ASP.NET Compatibility Mode

Obwohl die WCF-Modell für konsistentes Verhalten in Hostumgebungen und für Transporte konzipiert ist, sind häufig Szenarien, in denen eine Anwendung dieses Maß an Flexibilität nicht erforderlich sind.Although the WCF model is designed to behave consistently across hosting environments and transports, there are often scenarios where an application does not require this degree of flexibility. ASP.NET-Kompatibilitätsmodus von WCF eignet sich für Szenarien, die die Fähigkeit, Host außerhalb von IIS oder die Kommunikation über andere Protokolle als HTTP erfordert jedoch die Verwendung aller Funktionen der ASP.NET-Webanwendungsplattform.WCF’s ASP.NET compatibility mode is suitable for scenarios that do not require the ability to host outside of IIS or to communicate over protocols other than HTTP, but that use all of features of the ASP.NET Web application platform.

Im Gegensatz zu der Seite-an-Seite-Standardkonfiguration, in dem die WCF--Hostinfrastruktur fängt der WCF-Nachrichten ab und leitet sie aus der HTTP-Pipeline, teilnehmen WCF-Dienste im ASP.NET-Kompatibilitätsmodus ausgeführt voll am ASP.NET HTTP-Anforderungslebenszyklus.Unlike the default side-by-side configuration, where the WCF hosting infrastructure intercepts WCF messages and routes them out of the HTTP pipeline, WCF services running in ASP.NET Compatibility Mode participate fully in the ASP.NET HTTP request lifecycle. Im Kompatibilitätsmodus, WCF-Dienste verwenden die HTTP-Pipeline über eine IHttpHandler Implementierung, die ähnliche Weise, wie Anforderungen für ASPX-Seiten und ASMX-Webdienste behandelt werden.In compatibility mode, WCF services use the HTTP pipeline through an IHttpHandler implementation, similar to the way requests for ASPX pages and ASMX Web services are handled. Folglich verhält sich WCF identisch mit ASMX in Bezug auf die folgenden ASP.NET-Funktionen:As a result, WCF behaves identically to ASMX with respect to the following ASP.NET features:

  • HttpContext: WCF-Dienste im ASP.NET-Kompatibilitätsmodus ausgeführt erreichen Current und den zugehörigen Status.HttpContext: WCF services running in ASP.NET Compatibility Mode can access Current and its associated state.

  • Dateibasierte Autorisierung: WCF-Dienste im ASP.NET-Kompatibilitätsmodus ausgeführt, die Datei System-Zugriffssteuerungslisten (ACLs) auf die SVC Datei anfügen sicher sein können.File-based authorization: WCF services running in ASP.NET compatibility mode can be secure by attaching file system access control lists (ACLs) to the service’s .svc file.

  • Konfigurierbare URL-Autorisierung: ASP. NET URL-Autorisierungsregeln sind für WCF-Anforderungen erzwungen, wenn der WCF-Dienst im ASP.NET-Kompatibilitätsmodus ausgeführt wird.Configurable URL authorization: ASP.NET’s URL authorization rules are enforced for WCF requests when the WCF service is running in ASP.NET Compatibility Mode.

  • HttpModuleCollection Erweiterbarkeit: weil WCF-Dienste im ASP.NET-Kompatibilitätsmodus ausgeführt voll am ASP.NET HTTP-Anforderungslebenszyklus teilnehmen, alle HTTP-Module, die in der HTTP-Pipeline konfiguriert wird WCF-Anforderungen vor und nach dem Dienstaufruf arbeiten.HttpModuleCollection extensibility: Because WCF services running in ASP.NET Compatibility Mode participate fully in the ASP.NET HTTP request lifecycle, any HTTP module configured in the HTTP pipeline is able to operate on WCF requests both before and after service invocation.

  • ASP.NET-Identitätswechsel: WCF-Dienste ausgeführt, mit der aktuellen Identität, die der ASP.NET-Thread angenommen hat, der IIS-Prozessidentität unterscheiden sein kann, wenn ASP.NET-Identitätswechsel für die Anwendung aktiviert wurde.ASP.NET Impersonation: WCF services run using the current identity of the ASP.NET impersonated thread, which may be different than the IIS process identity if ASP.NET impersonation has been enabled for the application. Wenn ASP.NET-Identitätswechsel als auch WCF-Identitätswechsel für einen bestimmten Dienstvorgang aktiviert sind, die dienstimplementierung letztlich unter der Identität ausgeführt von WCF abgerufen.If ASP.NET impersonation and WCF impersonation are both enabled for a particular service operation, the service implementation ultimately runs using the identity obtained from WCF.

ASP.NET-Kompatibilitätsmodus von WCF wird auf Anwendungsebene über die folgende Konfiguration (befindet sich in der Anwendungsdatei "Web.config") aktiviert:WCF’s ASP.NET compatibility mode is enabled at the application level through the following configuration (located in the application’s Web.config file):

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

Dieser Wert liegt standardmäßig "true" nicht angegeben.This value defaults to "true" if not specified. Wenn dieser Wert auf "false" gibt an, dass alle WCF-Dienste, die in der Anwendung ausgeführt wird, nicht im ASP.NET-Kompatibilitätsmodus ausgeführt werden.Setting this value to "false" indicates that all WCF services running in the application will not run in ASP.NET Compatibility Mode.

Da der ASP.NET-Kompatibilitätsmodus Semantik der anforderungsverarbeitung impliziert, die grundlegend von der WCF-Standard sind, haben einzelnen dienstimplementierungen die Möglichkeit zu steuern, ob die Ausführung innerhalb einer Anwendung für die ASP.NET Kompatibilitätsmodus wurde aktiviert.Because ASP.NET Compatibility Mode implies request processing semantics that are fundamentally different from the WCF default, individual service implementations have the ability to control whether they run inside of an application for which ASP.NET Compatibility Mode has been enabled. Dienste können das AspNetCompatibilityRequirementsAttribute verwenden, um anzugeben, ob sie den ASP.NET-Kompatibilitätsmodus unterstützen.Services can use the AspNetCompatibilityRequirementsAttribute to indicate whether they support ASP.NET Compatibility Mode. Der Standardwert für dieses Attribut ist Allowed.The default value for this attribute is Allowed.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

public class CalculatorService : ICalculatorSession

{//Implement calculator service methods.}

In der folgenden Tabelle wird gezeigt, wie die Einstellung des anwendungsweiten Kompatibilitätsmodus mit der vom jeweiligen Dienst angegebenen Unterstützungsebene interagiert:The following table illustrates how the application-wide compatibility mode setting interacts with the individual service’s stated level of support:

Anwendungsweite Einstellung des KompatibilitätsmodusApplication-wide Compatibility Mode setting [AspNetCompatibilityRequirementsMode][AspNetCompatibilityRequirementsMode]

EinstellungSetting
Beobachtetes ErgebnisObserved Result
AspNetCompatibilityEnabled = "true"aspNetCompatibilityEnabled = "true" Required Dienst wird erfolgreich aktiviert.Service activates successfully.
AspNetCompatibilityEnabled = "true"aspNetCompatibilityEnabled = "true" Allowed Dienst wird erfolgreich aktiviert.Service activates successfully.
AspNetCompatibilityEnabled = "true"aspNetCompatibilityEnabled = "true" NotAllowed Ein Aktivierungsfehler tritt auf, wenn der Dienst eine Nachricht empfängt.An activation error occurs when the service receives a message.
AspNetCompatibilityEnabled = "false"aspNetCompatibilityEnabled = "false" Required Ein Aktivierungsfehler tritt auf, wenn der Dienst eine Nachricht empfängt.An activation error occurs when the service receives a message.
AspNetCompatibilityEnabled = "false"aspNetCompatibilityEnabled = "false" Allowed Dienst wird erfolgreich aktiviert.Service activates successfully.
AspNetCompatibilityEnabled = "false"aspNetCompatibilityEnabled = "false" NotAllowed Dienst wird erfolgreich aktiviert.Service activates successfully.

Hinweis

IIS 7.0 und WAS können WCF-Dienste über andere Protokolle als HTTP zu kommunizieren.IIS 7.0 and WAS allows WCF services to communicate over protocols other than HTTP. WCF-Dienste in Anwendungen, die ASP.NET-Kompatibilitätsmodus aktiviert haben, sind jedoch nicht zulässig, um nicht-HTTP-Endpunkte verfügbar zu machen.However, WCF services running in applications that have enabled ASP.NET compatibility mode are not permitted to expose non-HTTP endpoints. Eine solche Konfiguration generiert eine Aktivierungsausnahme, wenn der Dienst seine erste Nachricht empfängt.Such a configuration generates an activation exception when the service receives its first message.

Weitere Informationen zum Aktivieren der ASP.NET-Kompatibilitätsmodus für WCF-Dienste finden Sie unter AspNetCompatibilityRequirementsMode und ASP.NET-Kompatibilität Beispiel.For more information about enabling ASP.NET compatibility mode for WCF services, see AspNetCompatibilityRequirementsMode and the ASP.NET Compatibility sample.

Siehe auchSee Also

AspNetCompatibilityRequirementsAttribute
Windows Server AppFabric-HostingfunktionenWindows Server App Fabric Hosting Features