System.Web.Routing-Integration
Beim Hosten eines Windows Communication Foundation (WCF)-Diensts in Internetinformationsdienste (IIS) fügen Sie eine SVC-Datei in das virtuelle Verzeichnis ein. Diese SVC-Datei gibt die zu verwendende Diensthostfactory sowie die Klasse an, die den Dienst implementiert. Beim Senden von Anforderungen an den Dienst geben Sie die SVC-Datei im URI an, z. B.: https://contoso.com/EmployeeServce.svc. Für Programmierer, die REST-Dienste schreiben, ist dieser Typ von URI nicht optimal. URIs für REST-Dienste geben eine bestimmte Ressource an und verfügen normalerweise nicht über Erweiterungen. Mithilfe der System.Web.Routing-Integrationsfunktion können Sie einen WCF-REST-Dienst hosten, der auf URIs ohne Erweiterung reagiert. Weitere Informationen über zum Routing finden Sie unter Routing.
Verwenden der N:System.Web.Routing-Integration
Für die System.Web.Routing-Integrationsfunktion verwenden Sie die ServiceRoute-Klasse, um eine oder mehrere Routen zu erstellen und diese dem RouteTable-Objekt in einer Global.asax-Datei hinzuzufügen. Diese Routen geben die relativen URIs an, auf die der Dienst reagiert. Dies wird im folgenden Beispiel veranschaulicht.
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.ServiceModel.Activation" %>
<%@ Import Namespace="System.ServiceModel.Web " %>
<script RunAt="server">
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
private void RegisterRoutes(RouteCollection routes)
{
routes.Add(new ServiceRoute("Customers", new WebServiceHostFactory(), typeof(Service)));
}
</script>
Hier werden alle Anforderungen mit einem relativen URI, die mit "Customers" beginnen, an den Service
-Dienst weitergeleitet.
In der Datei "Web.config" müssen Sie das System.Web.Routing.UrlRoutingModule
-Modul hinzufügen, das runAllManagedModulesForAllRequests
-Attribut auf true
setzen und dem <system.webServer>
-Element den UrlRoutingHandler
-Handler hinzufügen. Dies wird im folgenden Beispiel veranschaulicht.
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<handlers>
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/>
</handlers>
</system.webServer>
Es werden ein Modul und ein Handler geladen, die für das Routing erforderlich sind. Weitere Informationen finden Sie unter Routing. Außerdem müssen Sie das aspNetCompatibilityEnabled
-Attribut wie im folgenden Beispiel gezeigt im <serviceHostingEnvironment>
-Element auf true
setzen.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<!-- ... -->
</system.serviceModel>
Die Klasse, die den Dienst implementiert, muss die ASP.NET-Kompatibilitätsanforderungen wie im folgenden Beispiel gezeigt aktivieren.
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service
{
// ...
}