compatibiliteit met ASP.NET
Het ASPNetCompatibility-voorbeeld laat zien hoe u ASP.NET compatibiliteitsmodus inschakelt in WCF (Windows Communication Foundation). Services die worden uitgevoerd in ASP.NET compatibiliteitsmodus, nemen volledig deel aan de pijplijn van de ASP.NET toepassing en kunnen gebruikmaken van ASP.NET functies zoals bestands-/URL-autorisatie, sessiestatus en de HttpContext klasse. De HttpContext klasse biedt toegang tot cookies, sessies en andere ASP.NET functies. Deze modus vereist dat de bindingen het HTTP-transport gebruiken en dat de service zelf moet worden gehost in IIS.
In dit voorbeeld is de client een consoletoepassing (een uitvoerbaar bestand) en wordt de service gehost in Internet Information Services (IIS).
Notitie
De installatieprocedure en build-instructies voor dit voorbeeld bevinden zich aan het einde van dit onderwerp.
Voor dit voorbeeld is een .NET Framework 4-toepassingsgroep vereist om uit te voeren. Als u een nieuwe groep van toepassingen wilt maken of de standaardgroep van toepassingen wilt wijzigen, volgt u deze stappen.
Open het Configuratiescherm. Open de Beheer istrative Tools applet onder de kop Systeem en beveiliging. Open de IIS Manager-applet (Internet Information Services).
Vouw de structuurweergave uit in het deelvenster Verbinding maken ions. Selecteer het knooppunt Toepassingsgroepen .
Als u de standaardtoepassingsgroep wilt instellen voor het gebruik van .NET Framework 4 (wat incompatibiliteitsproblemen met bestaande sites kan veroorzaken), klikt u met de rechtermuisknop op het lijstitem DefaultAppPool en selecteert u Basic Instellingen.... Stel de vervolgkeuzelijst .Net Framework-versie in op .Net Framework v4.0.30128 (of hoger).
Als u een nieuwe groep toepassingen wilt maken die gebruikmaakt van .NET Framework 4 (om de compatibiliteit voor andere toepassingen te behouden), klikt u met de rechtermuisknop op het knooppunt Toepassingsgroepen en selecteert u Groep van toepassingen toevoegen.... Geef de nieuwe toepassingsgroep een naam en stel de vervolgkeuzelijst .Net Framework-versie in op .Net Framework v4.0.30128 (of hoger). Nadat u de onderstaande installatiestappen hebt uitgevoerd, klikt u met de rechtermuisknop op de toepassing ServiceModelSamples en selecteert u Toepassing beheren, Geavanceerd Instellingen.... Stel de groep van toepassingen in op de nieuwe groep van toepassingen.
Dit voorbeeld is gebaseerd op aan de slag, waarmee een rekenmachineservice wordt geïmplementeerd. Het ICalculator
contract is gewijzigd omdat het ICalculatorSession
contract toestaat dat een set bewerkingen kan worden uitgevoerd, terwijl een actief resultaat behouden blijft.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculatorSession
{
[OperationContract]
void Clear();
[OperationContract]
void AddTo(double n);
[OperationContract]
void SubtractFrom(double n);
[OperationContract]
void MultiplyBy(double n);
[OperationContract]
void DivideBy(double n);
[OperationContract]
double Result();
}
De service onderhoudt de status, met behulp van de functie, voor elke client als meerdere servicebewerkingen worden aangeroepen om een berekening uit te voeren. De client kan het huidige resultaat ophalen door aan te roepen Result
en kan het resultaat op nul wissen door aan te roepen Clear
.
De service gebruikt de ASP.NET sessie om het resultaat voor elke clientsessie op te slaan. Hierdoor kan de service het actieve resultaat voor elke client behouden voor meerdere aanroepen naar de service.
Notitie
ASP.NET sessiestatus en WCF-sessies zijn heel verschillend. Zie Sessie voor meer informatie over WCF-sessies.
De service heeft een intieme afhankelijkheid van ASP.NET sessiestatus en vereist dat ASP.NET compatibiliteitsmodus correct functioneert. Deze vereisten worden declaratief uitgedrukt door het AspNetCompatibilityRequirements
kenmerk toe te passen.
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Required)]
public class CalculatorService : ICalculatorSession
{
double Result
{ // store result in AspNet Session
get {
if (HttpContext.Current.Session["Result"] != null)
return (double)HttpContext.Current.Session["Result"];
return 0.0D;
}
set
{
HttpContext.Current.Session["Result"] = value;
}
}
public void Clear()
{
Result = 0.0D;
}
public void AddTo(double n)
{
Result += n;
}
public void SubtractFrom(double n)
{
Result -= n;
}
public void MultiplyBy(double n)
{
Result *= n;
}
public void DivideBy(double n)
{
Result /= n;
}
public double Result()
{
return Result;
}
}
Wanneer u het voorbeeld uitvoert, worden de bewerkingsaanvragen en -antwoorden weergegeven in het clientconsolevenster. Druk op Enter in het clientvenster om de client af te sluiten.
0, + 100, - 50, * 17.65, / 2 = 441.25
Press <ENTER> to terminate client.
Het voorbeeld instellen, compileren en uitvoeren
Zorg ervoor dat u de eenmalige installatieprocedure voor de Windows Communication Foundation-voorbeelden hebt uitgevoerd.
Als u de C# of Visual Basic .NET-editie van de oplossing wilt bouwen, volgt u de instructies in het bouwen van de Windows Communication Foundation-voorbeelden.
Nadat de oplossing is gebouwd, voert u Setup.bat uit om de ServiceModelSamples-toepassing in IIS 7.0 in te stellen. De map ServiceModelSamples moet nu worden weergegeven als een IIS 7.0-toepassing.
Als u het voorbeeld wilt uitvoeren in een configuratie met één computer of meerdere computers, volgt u de instructies in Het uitvoeren van de Windows Communication Foundation-voorbeelden.