Een door Internet Information Services gehoste WCF-service implementeren
Het ontwikkelen en implementeren van een WCF-service (Windows Communication Foundation) die wordt gehost in Internet Information Services (IIS) bestaat uit de volgende taken:
Zorg ervoor dat IIS, ASP.NET, WCF en het WCF-activeringsonderdeel correct zijn geïnstalleerd en geregistreerd.
Maak een nieuwe IIS-toepassing of gebruik een bestaande ASP.NET-toepassing.
Maak een .svc-bestand voor de WCF-service.
Implementeer de service-implementatie in de IIS-toepassing.
Configureer de WCF-service.
Zie How to: Host a WCF Service in IIS (Een WCF-service hosten in IIS) voor een gedetailleerd overzicht van het maken van een DOOR IIS gehoste WCF-service.
Zorg ervoor dat IIS, ASP.NET en WCF correct zijn geïnstalleerd en geregistreerd
WCF, IIS en ASP.NET moeten worden geïnstalleerd voor WCF-services die worden gehost door IIS, zodat deze correct werken. De procedures voor het installeren van WCF (als onderdeel van .NET Framework), ASP.NET en IIS variëren afhankelijk van uw besturingssysteem. Zie .NET Framework installeren voor ontwikkelaars voor meer informatie over het installeren van WCF en .NET Framework. Als u IIS wilt installeren in Windows 10, opent u Programma's en onderdelen in Configuratiescherm en selecteert u Windows-functies in- of uitschakelen. Selecteer Internet Information Services in Windows-onderdelen en kies VERVOLGENS OK.
Instructies voor het installeren van IIS op andere besturingssystemen vindt u op IIS installeren op Windows Vista en Windows 7 en IIS 8.5 installeren op Windows Server 2012 R2.
Tijdens het installatieproces voor .NET Framework wordt WCF automatisch geregistreerd bij IIS als IIS al aanwezig is op de computer. Als IIS na .NET Framework is geïnstalleerd, is een extra stap vereist voor het registreren van WCF bij IIS en ASP.NET. U kunt dit als volgt doen, afhankelijk van uw besturingssysteem:
Windows 7 en Windows Server 2003: gebruik het hulpprogramma ServiceModel Registration Tool (ServiceModelReg.exe) om WCF te registreren bij IIS. Als u dit hulpprogramma wilt gebruiken, voert u de opdrachtprompt
ServiceModelReg.exe /i /x
voor Visual Studio Developer of Visual Studio Developer PowerShell in.Windows 7: Ten slotte moet u controleren of ASP.NET is geconfigureerd voor het gebruik van .NET Framework versie 4 of hoger. U doet dit door het hulpprogramma ASPNET_Regiis uit te voeren met de
–i
optie. Zie ASP.NET IIS-registratieprogramma voor meer informatie.
Een nieuwe IIS-toepassing maken of een bestaande ASP.NET-toepassing opnieuw gebruiken
IIS-gehoste WCF-services moeten zich in een IIS-toepassing bevinden. U kunt een nieuwe IIS-toepassing maken om uitsluitend WCF-services te hosten. U kunt ook een WCF-service implementeren in een bestaande toepassing die al als host fungeert voor ASP.NET 2.0-inhoud (zoals .aspx pagina's en ASP.NET-webservices [ASMX]). Zie de secties 'WCF naast ASP.NET hosten' en 'WCF-services hosten in ASP.NET compatibiliteitsmodus' in WCF-services en ASP.NET voor meer informatie over deze opties.
Houd er rekening mee dat IIS 6.0 en latere versies periodiek een geïsoleerde objectgeoriënteerde programmeertoepassing opnieuw opstarten. De standaardwaarde is 1740 minuten. De maximale waarde die wordt ondersteund, is 71.582 minuten. Deze herstart kan worden uitgeschakeld. Zie de PeriodicRestartTime voor meer informatie over deze eigenschap.
Een .svc-bestand maken voor de WCF-service
WCF-services die worden gehost in IIS worden weergegeven als speciale inhoudsbestanden (.svc-bestanden) in de IIS-toepassing. Dit model is vergelijkbaar met de manier waarop ASMX-pagina's worden weergegeven in een IIS-toepassing als .asmx-bestanden. Een .svc-bestand bevat een WCF-specifieke verwerkingsrichtlijn (@ServiceHost) waarmee de WCF-hostinginfrastructuur gehoste services kan activeren als reactie op binnenkomende berichten. De meest voorkomende syntaxis voor een .svc-bestand bevindt zich in de volgende instructie.
<% @ServiceHost Service="MyNamespace.MyServiceImplementationTypeName" %>
Het bestaat uit de @ServiceHost richtlijn en één kenmerk, Service
. De waarde van het kenmerk is de naam van het Service
CLR-type (Common Language Runtime) van de service-implementatie. Het gebruik van deze richtlijn is in principe gelijk aan het maken van een servicehost met behulp van de volgende code.
new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );
Aanvullende hostingconfiguratie, zoals het maken van een lijst met basisadressen voor de service, kan ook worden uitgevoerd. U kunt ook een aangepaste oplossing ServiceHostFactory gebruiken om de richtlijn uit te breiden voor gebruik met aangepaste hostingoplossingen. De IIS-toepassingen die WCF-services hosten, zijn niet verantwoordelijk voor het beheren van het maken en levensduur van ServiceHost exemplaren. De beheerde WCF-hostinginfrastructuur maakt dynamisch het benodigde ServiceHost exemplaar wanneer de eerste aanvraag wordt ontvangen voor het .svc-bestand. Het exemplaar wordt pas vrijgegeven als het expliciet wordt gesloten met code of wanneer de toepassing wordt gerecycled.
Zie @ServiceHost voor meer informatie over de syntaxis voor .svc-bestanden.
De service-implementatie implementeren in de IIS-toepassing
WCF-services die worden gehost in IIS gebruiken hetzelfde dynamische compilatiemodel als ASP.NET 2.0. Net als bij ASP.NET kunt u de implementatiecode voor DOOR IIS gehoste WCF-services op verschillende locaties als volgt implementeren:
Als een vooraf gecompileerd .dll bestand dat zich in de algemene assemblycache (GAC) of in de map \bin van de toepassing bevindt. Vooraf gecompileerde binaire bestanden worden pas bijgewerkt als er een nieuwe versie van de klassebibliotheek is geïmplementeerd.
Als niet-gecompileerde bronbestanden in de map \App_Code van de toepassing. Bronbestanden die zich in deze map bevinden, zijn dynamisch vereist bij het verwerken van de eerste aanvraag van de toepassing. Wijzigingen in bestanden in de map \App_Code zorgen ervoor dat de hele toepassing wordt gerecycled en opnieuw wordt gecompileerd wanneer de volgende aanvraag wordt ontvangen.
Als niet-gecompileerde code die rechtstreeks in het .svc-bestand wordt geplaatst. Implementatiecode kan zich ook inline bevinden in het .svc-bestand van de service, na de @ServiceHost-instructie. Wijzigingen in inlinecode zorgen ervoor dat de toepassing wordt gerecycled en opnieuw wordt gecompileerd wanneer de volgende aanvraag wordt ontvangen.
Zie ASP.NET Compilatieoverzicht voor meer informatie over het compilatiemodel ASP.NET 2.0.
De WCF-service configureren
Met IIS gehoste WCF-services worden hun configuratie opgeslagen in het web.config-bestand van de toepassing. IiS-gehoste services gebruiken dezelfde configuratie-elementen en syntaxis als WCF-services die buiten IIS worden gehost. De volgende beperkingen zijn echter uniek voor de IIS-hostingomgeving:
Basisadressen voor door IIS gehoste services.
Toepassingen die WCF-services buiten IIS hosten, kunnen het basisadres beheren van de services die ze hosten door een set basisadres-URI's door te geven aan de ServiceHost constructor of door een <hostelement> in de configuratie van de service op te geven. Services die worden gehost in IIS hebben niet de mogelijkheid om hun basisadres te beheren; het basisadres van een door IIS gehoste service is het adres van het .svc-bestand.
Eindpuntadressen voor iis-gehoste services
Wanneer deze worden gehost in IIS, worden eindpuntadressen altijd beschouwd als relatief ten opzichte van het adres van het .svc-bestand dat de service vertegenwoordigt. Als het basisadres van een WCF-service bijvoorbeeld de volgende eindpuntconfiguratie heeft http://localhost/Application1/MyService.svc
:
<endpoint address="anotherEndpoint" />
Dit biedt een eindpunt dat kan worden bereikt op http://localhost/Application1/MyService.svc/anotherEndpoint
.
Op dezelfde manier biedt het eindpuntconfiguratie-element dat een lege tekenreeks gebruikt als het relatieve adres een eindpunt dat bereikbaar is op http://localhost/Application1/MyService.svc
, het basisadres.
<endpoint address="" />
U moet altijd relatieve eindpuntadressen gebruiken voor service-eindpunten die worden gehost door IIS. Het opgeven van een volledig gekwalificeerde eindpuntadres (bijvoorbeeld http://localhost/MyService.svc
) kan leiden tot fouten in de implementatie van de service als het eindpuntadres niet verwijst naar de IIS-toepassing die als host fungeert voor de service die het eindpunt weergeeft. Het gebruik van relatieve eindpuntadressen voor gehoste services voorkomt deze mogelijke conflicten.
Beschikbare transporten
WCF-services die worden gehost in IIS 5.1 en IIS 6.0, zijn beperkt tot het gebruik van HTTP-communicatie. Op deze IIS-platforms leidt het configureren van een gehoste service voor het gebruik van een niet-HTTP-binding tot een fout tijdens de activering van de service. Voor IIS 7.0 zijn de ondersteunde transporten HTTP, Net.TCP, Net.Pipe, Net.MSMQ en msmq.formatname voor achterwaartse compatibiliteit met bestaande MSMQ-toepassingen.
HTTP-transportbeveiliging
IIS-gehoste WCF-services kunnen gebruikmaken van HTTP-transportbeveiliging (bijvoorbeeld HTTPS- en HTTP-verificatieschema's zoals Basic, Digest en Geïntegreerde Windows-verificatie) zolang de virtuele IIS-map met de service deze instellingen ondersteunt. De http-transportbeveiligingsinstellingen op de binding van een gehost eindpunt moeten overeenkomen met de transportbeveiligingsinstellingen in de virtuele IIS-map die deze bevat.
Een WCF-eindpunt dat is geconfigureerd voor het gebruik van HTTP-digest-verificatie, moet zich bijvoorbeeld bevinden in een virtuele IIS-map die ook is geconfigureerd om HTTP-digest-verificatie toe te staan. Niet-overeenkomende combinaties van IIS-instellingen en WCF-eindpuntinstellingen leiden tot een fout tijdens de activering van de service.