Upload
drake-garner
View
35
Download
0
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
Session
Når man hoster en WCF Service på ASP.NET website,
kan man bruge ASP.NET’sSession
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)
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; }}
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)
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
Interface med kontrakten
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)
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
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