9
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session

Session

Embed Size (px)

DESCRIPTION

Session. Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session. Implementering af tilgang til ASP.NET session mm for WcfService. using ……….; ………………………….. using System.Web; using System.ServiceModel.Activation; namespace WebApplication { - PowerPoint PPT Presentation

Citation preview

Page 1: Session

Session

Når man hoster en WCF Service på ASP.NET website,

kan man bruge ASP.NET’sSession

Page 2: Session

using ……….;…………………………..using System.Web;using System.ServiceModel.Activation;

namespace WebApplication{ [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] public class CountService : ICountService { private int count = 0; public int Count() { if(HttpContext.Current.Session["count"] != null) count = (int) HttpContext.Current.Session["count"]; ++count; HttpContext.Current.Session["count"] = count; return count; }…………………………………

Der skal herudover tilføjes aspNetCompatibilityEnabled="true" til serviceHostingEnvironment elementet i web.ConfigUddrag af web.Config

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

Implementering af tilgang til ASP.NET session mm for WcfServiceMan kan på HttpContext.Current også her få tilgang til ASP.NET’s Application objekt (singleton)

Page 3: Session

Implementering af tilgang til ASP.NET session mm for WcfServiceDen elegante løsning med brug af property

Den elegante løsning med brug af property

private int count{ get { if (System.Web.HttpContext.Current.Session["count"] == null) System.Web.HttpContext.Current.Session["count"] = (int)0; //initier return (int)System.Web.HttpContext.Current.Session["count"]; } set { System.Web.HttpContext.Current.Session["count"] = value; }}

Page 4: Session

Session skal tillades på klienten der anvender en wcfService (.svc), en asp.net webservice (.asmx) eller remoting

Bemærk at man her kun får én session for klient-applicationen, hvis man ønsker én pr. service (proxy) klasse skal man anvende endpoint og wsHttpBinding for wcf-service – se mere avanceret senere

Uddrag af Config filene på windows- / consoleklient (normalt via app.config)

<binding name="BasicHttpBinding_I CountService" allowCookies="true" …………… />

Hvis der i klient programmet ønskes en session pr. Proxy skal man desuden sætte user name og password selv om der ikke kræves login for at bruge servicen.

SessionCounterWcfServiceClient serviceProxy = new SessionCounterWcfServiceClient();serviceProxy.ClientCredentials.UserName.UserName = "";serviceProxy.ClientCredentials.UserName.Password = "";........int c = serviceProxy.Count();

Session skal tillades på klientenfor basicHttpBinding (soap 1.1)

Page 5: Session

Mere om Session

Det næste om session kan man springe over

hvis man hoster WCF service på ASP.NET website

og vil nøjes med den enkle løsning

Page 6: Session

Interface med kontrakten

Page 7: Session

Hvis man vil anvende session i selve serviceklasserne med [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] kan man definere det som i web.config. Dette gøres ved at definere sit service endpoint (angives også i .svc filen) og er endpoint Soap12, sætte kontrakten og binding til wsHttpBindingDenne løsning gælder også hvis én session pr. proxy klasse på klient selv om man bruger ASP.NET Sessions

Uddrag af Web.Config for at bruge Session i en WcfServiceApplication

<system.serviceModel>…… <services> <service name="WcfService1.Service1" > <endpoint address="Soap12" contract="WcfService1.IService1" binding="wsHttpBinding"/> </service> </services> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />……</system.serviceModel>

ASP.NET WcfServiceApplication med session

<= Her Defineres selve klassen, der implementere kontrakten

<= Her Defineres kontrakten (normal interfacet)

Page 8: Session

Hvis man vil anvende login for at bruge sin service med session fra flere proxy i samme application skal der desuden defineres at man ikke ønsker at der opsættes sikkerhed for servicen definere det vor wsHttpBinding (Sikkerhed udelades i denne runde)

Uddrag af Web.Config for at bruge Session i en WcfServiceApplication

<system.serviceModel>…… <bindings> <wsHttpBinding> <binding name=""> <security mode="None"> <message establishSecurityContext="false" /> </security> <reliableSession enabled="true"/> </binding> </wsHttpBinding> </bindings>……</system.serviceModel>

ASP.NET WcfServiceApplication med session

Page 9: Session

WcfServiceApplication med session på serviceobject kræver at man får lavet en wsHttpBinding. Dette kan gøres med en tilføjelse til Web.Config.

Denne løsning gælder ikke for WebAppication (ASP.NET) der kører på IISPå ISS kan man heller ikke selv sætte en protokol, den er givet http

Uddrag af Web.Config for at bruge Session i en WcfServiceApplication

<system.serviceModel>…… <protocolMapping> <add scheme="http" binding="wsHttpBinding" /> </protocolMapping>……</system.serviceModel>

WcfServiceApplication med session