Distribution af funktionalitet Webservice med WCF - PowerPoint PPT Presentation

1 / 26
About This Presentation
Title:

Distribution af funktionalitet Webservice med WCF

Description:

... tier distribution ASP.NET - n tier distribution Webservice - SOAP Remoting arkitektur Server og klient er begge .NET Remoting service ... – PowerPoint PPT presentation

Number of Views:154
Avg rating:3.0/5.0
Slides: 27
Provided by: Bjrk8
Category:

less

Transcript and Presenter's Notes

Title: Distribution af funktionalitet Webservice med WCF


1
  • Distribution af funktionalitetWebservice med WCF

x
2
Different technology combined to form WCF.
http//wcftutorial.net/Introduction-to-WCF.aspx
3
ASP.NET - 1 tier distribution
http//msdn.microsoft.com/en-us/library/bb547119.a
spx
4
ASP.NET - 2 tier distribution
http//msdn.microsoft.com/en-us/library/bb547119.a
spx
5
ASP.NET - n tier distribution
http//msdn.microsoft.com/en-us/library/bb547119.a
spx
6
Webservice - SOAP
7
Remoting arkitekturServer og klient er begge
.NET
  • Generel arkitektur
  • Proxy, stub, formattering og channel kan ændres.
    Fx er en binær formattering, der både
    understøttes af TCP og HTTP, mere effektiv end en
    tekstbaseret (XML)

8
Remoting service - muligheder
  • Server-activated object (SAO)også betegnet
    Wellknown objects
  • Singleton Ét serverobjekt til alle klienter
  • Trådproblemer
  • SingleCall Ét objekt pr. metodekald
  • Nemmeste løsning men mindst effektivt
  • Tilstand opretholdes vha. filer eller database
  • Client-activated object (CAO)
  • Activated Ét objekt pr. klient
  • Levetidsproblem Leasing understøttes ikke af IIS

9
Windows Communication Foundation Architecture
http//msdn.microsoft.com/en-us/library/ms733128.a
spx
10
Hosting WCF Side-by-Side with ASP.NET
http//msdn.microsoft.com/en-us/library/aa702682.a
spx
11
WCF understøtter de 3 state senarier
Se evt. også for en anden info om disse 3 på
http//www.codeproject.com/KB/WCF/WCFInstance.aspx
12
WCF host og protokol
  • Wcf kan som remoting (singleton og singlecall)
    integreres i et asp.net web og afvikles på
    IISen,hvor wcf desuden kan opnås tilgang til
    ASP.NETs Session, Application objekter m.m.
  • Wcf kan anvendes uden for ISSen med andre
    protokoller end http.
  • Wcf kan understøtte fx json og ikke kun soap,
    hvilket ikke let opnås med ASP.NET webservices

13
WCF data protokoller
http//msdn.microsoft.com/en-us/library/bb547119.a
spx
14
WCF brug
  • Service defineres som ServiceContract på
    interface / klasse der skal fungere som
    service-object, hvor metoder der skal være
    tilgængelige externt defineres som
    OperationContracts
  • Transport-objekter defineres som DataContractog
    felter/property der skal med som data som
    DataMembers.
  • Wcf kan understøtte fx json og ikke kun soap,
    hvilket ikke let opnås med ASP.NET webservices

15
Interface med kontrakten
Normalt vil man definere kontrakten på et
Interface, men kan også definere denne på selve
klassen, hvis man ikke ønsker et interface using
System.Runtime.Serialization using
System.ServiceModel using System.ServiceModel.Web
using System.Text namespace MyNamespace
ServiceContract // Attribut på interfacet
public interface IService1
OperationContract // Attribut på metoder der
skal kunne tilgås via servicen (proxyen)
string GetData(int value) Hvis der skal
anvendes session på servicen under en
WcfServiceApplication (kan ikke bruges på ASP.NET
website under ISS) skal ServiceContracten
tilføjes parametre og den ser således ud
ServiceContract(Namespace "http//Microsoft.Ser
viceModel.Samples", SessionMode
SessionMode.Required)
16
Implementeringsklassen for kontrakten
  • using System.Runtime.Serialization
  • using System.ServiceModel
  • using System.ServiceModel.Web
  • using System.Text
  • using System.Web.Services
  • using System.Web
  • namespace MyNameSpace
  • //ServiceBehavior(InstanceContextMode
    InstanceContextMode.PerCall)
  • //ServiceBehavior(InstanceContextMode
    InstanceContextMode.Single)
  • //ServiceBehavior(InstanceContextMode
    InstanceContextMode.PerSession)
  • public class Service1 IService1
  • public string GetData(int value)
  • return string.Format("You entered
    0 lt1gt", value count, s)

17
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å IIS På 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 ltsystem.servic
eModelgt ltprotocolMappinggt ltadd
scheme"http" binding"wsHttpBinding"
/gt lt/protocolMappinggt lt/system.servi
ceModelgt
18
Implementering af tilgang til ASP.NET session mm
for WcfService
using . .. using System.Web using
System.ServiceModel.Activation namespace
WebApplication AspNetCompatibilityRequireme
nts(RequirementsMode AspNetCompatibilityRequir
ementsMode.Required) public class
CountService ICountService
private int count 0 public int
Count() if(HttpContext.Curre
nt.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.Config Uddrag af web.Config
ltsystem.serviceModelgt ltserviceHostingEnvir
onment multipleSiteBindingsEnabled"true"
aspNetCompatibilityEnabled"true" /gt .
lt/system.serviceModelgt
19
ASP.NET WcfServiceApplication med session
Hvis man vil anvende session i selve
serviceklasserne med ServiceBehavior(InstanceCont
extMode 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 ltsystem.servic
eModelgt ltservicesgt ltservice
name"WcfService1.Service1" gt ltendpoint
address"Soap12" contract"WcfService1.ISe
rvice1 binding"wsHttpBinding"/gt
lt/servicegt lt/servicesgt ltserviceHostingEnviron
ment multipleSiteBindingsEnabled"true"
aspNetCompatibilityEnabled"true"
/gt lt/system.serviceModelgt
lt Her Defineres selve klassen, der
implementere kontrakten
lt Her Defineres kontrakten (normal
interfacet)
20
Data transport objekter (DTO)
Hvis der skal overføres sammensatte objekter
(altså ikke simple typer, string og array) så
skal disse kunne serialiseres dette skal ske
med brug at en DataContract tidligere kunne man
anvende Serializable på Webservice ville kun
blive overført public felter og public property,
svarende til en XML serialisering. using
System.Runtime.Serialization
DataContract // klasse kan serialiseres
public class CompositeType
DataMember // felt skal med bool
_boolValue true string _stringValue
"Hello " DataMember // property
skal med public int EnInt private get
set
21
Data transport objekter (DTO)

22
Session skal tillades på klientenfor
basicHttpBinding (soap 1.1)
Session skal tillades på klienten der anvender en
wcfService (.svc), en asp.net webservice (.asmx)
eller remotingBemæ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
tidligere slides Uddrag af Config filene på
windows- / consoleklient (normalt via
app.config) ltbinding name"BasicHttpBinding_IRe
gneService" closeTimeout"000100"
openTimeout"000100" receiveTimeout"0010
00" sendTimeout"000100"
allowCookies"true" bypassProxyOnLocal"false"
hostNameComparisonMode"StrongWildcard"
maxBufferSize"65536"
maxBufferPoolSize"524288" maxReceivedMessageSize
"65536"
23
IIS skal sættes til ASP.NET v4.0 (mindst)
24
Tilføj asynkrone metoderså wcf-/webservice kan
køres i baggrund
25
Eksempel på Asynkron kald af Wcf-Service
  • delegate void VisIntEvent(int tal)
    // nødvendig med
  • private void VisInt(int tal)
  • textBox3.Text "" tal
  • // Asynkron kald af WcfService klasse
  • private void button1_Click(object sender,
    EventArgs e)
  • int a int.Parse(textBox1.Text)
  • int b int.Parse(textBox2.Text)
  • RegneServiceReference.RegneServiceClie
    nt serviceAsync new RegneServiceReference.Regn
    eServiceClient() // brug klasse
  • serviceAsync.AddCompleted
    AddCompletedEvent
  • serviceAsync.AddAsync(a, b)
  • private void AddCompletedEvent(object
    sender, RegneServiceReference.AddCompletedEventArg
    s e)

26
Eksempel på Asynkron kald af asmx Web-Service
  • delegate void VisIntEvent(int tal)
    // nødvendig med
  • private void VisInt(int tal)
  • textBox3.Text "" tal
  • // Asynkron kald af asmx webservice
  • private void button2_Click(object sender,
    EventArgs e)
  • int a int.Parse(textBox1.Text)
  • int b int.Parse(textBox2.Text)
  • AsmxWebServiceReference.WebRegneServic
    eSoapClient asmxService new
    AsmxWebServiceReference.WebRegneServiceSoapClie
    nt() // Brug klasse
  • asmxService.AddCompleted
    asmxAddCompletedEvent
  • asmxService.AddAsync(a,b)
  • private void asmxAddCompletedEvent(object
    sender, AsmxWebServiceReference.AddCompletedEventA
    rgs e)
  • int r e.Result //
    Bemærk e.Result resultatet
Write a Comment
User Comments (0)
About PowerShow.com