Distribution af funktionalitet webservice med wcf
This presentation is the property of its rightful owner.
Sponsored Links
1 / 26

Distribution af funktionalitet Webservice med WCF PowerPoint PPT Presentation


  • 62 Views
  • Uploaded on
  • Presentation posted in: General

Distribution af funktionalitet Webservice med WCF. x. Different technology combined to form WCF. http://wcftutorial.net/Introduction-to-WCF.aspx. ASP.NET - 1 tier distribution. http://msdn.microsoft.com/en-us/library/bb547119.aspx. ASP.NET - 2 tier distribution.

Download Presentation

Distribution af funktionalitet Webservice med WCF

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Distribution af funktionalitet webservice med wcf

Distribution af funktionalitetWebservice med WCF

x


Different technology combined to form wcf

Different technology combined to form WCF.

http://wcftutorial.net/Introduction-to-WCF.aspx


Asp net 1 tier distribution

ASP.NET - 1 tier distribution

http://msdn.microsoft.com/en-us/library/bb547119.aspx


Asp net 2 tier distribution

ASP.NET - 2 tier distribution

http://msdn.microsoft.com/en-us/library/bb547119.aspx


Asp net n tier distribution

ASP.NET - n tier distribution

http://msdn.microsoft.com/en-us/library/bb547119.aspx


Webservice soap

Webservice - SOAP


Remoting arkitektur server og klient er begge net

Server

Client

stub

proxy

remoting

remoting

formatter

channel

formatter

listener

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)


Remoting service muligheder

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


Windows communication foundation architecture

Windows Communication Foundation Architecture

http://msdn.microsoft.com/en-us/library/ms733128.aspx


Hosting wcf side by side with asp net

Hosting WCF Side-by-Side with ASP.NET

http://msdn.microsoft.com/en-us/library/aa702682.aspx


Wcf underst tter de 3 state senarier

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


Wcf host og protokol

WCF host og protokol

  • Wcf kan som remoting (singleton og singlecall)integreres i et asp.net web og afvikles på IIS’en,hvor wcf desuden kan opnås tilgang til ASP.NET’s Session, Application objekter m.m.

  • Wcf kan anvendes uden for ISS’en med andre protokoller end http.

  • Wcf kan understøtte fx json og ikke kun soap, hvilket ikke let opnås med ASP.NET webservices


Wcf data protokoller

WCF data protokoller

http://msdn.microsoft.com/en-us/library/bb547119.aspx


Wcf brug

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 OperationContract’s

  • Transport-objekter defineres som DataContractog felter/property der skal med som data som DataMember’s.

  • Wcf kan understøtte fx json og ikke kun soap, hvilket ikke let opnås med ASP.NET webservices


Interface med kontrakten

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 ServiceContract’en tilføjes parametre og den ser således ud:

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples", SessionMode = SessionMode.Required)]


Implementeringsklassen for kontrakten

Implementeringsklassen for kontrakten

  • usingSystem.Runtime.Serialization;

  • usingSystem.ServiceModel;

  • usingSystem.ServiceModel.Web;

  • usingSystem.Text;

  • usingSystem.Web.Services;

  • usingSystem.Web;

  • namespaceMyNameSpace

  • {

  • //[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

  • //[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

  • //[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]

  • public class Service1 : IService1

  • {

  • public stringGetData(intvalue)

  • {

  • return string.Format("You entered: {0} <{1}>", value + count, s);

  • }

  • Tilhørendemarkeup Service1.svc file, der giver bindingentil service1:

  • <%@ ServiceHost Language="C#" Debug="true" Service=“MyNameSpace.Service1" CodeBehind="Service1.svc.cs" %>

  • Default er InstanceContextMode.PerCall (eet nyt service objekt for hver kald)

  • InstanceContextMode.Single (eet service object for hele applicationen – husk trådsikring)

  • InstanceContextMode.PerSession (eet service object for en session) – dette kan ikke bruges når service kører på Internet Information Server ( ISS - WebApplication), hvor man i stedet skal anvende ASP.NET Session (wsHttpBinding)


Wcfserviceapplication med session

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

<system.serviceModel>

……

<protocolMapping>

<add

scheme="http"

binding="wsHttpBinding"

/>

</protocolMapping>

……

</system.serviceModel>


Implementering af tilgang til asp net session mm for wcfservice

Implementering af tilgang til ASP.NET session mm for WcfService

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.Config

Uddrag af web.Config

<system.serviceModel>

………

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />

……….

</system.serviceModel>


Asp net wcfserviceapplication med session

ASP.NET WcfServiceApplication med 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>

<= Her Defineres selve klassen,

der implementere kontrakten

<= Her Defineres kontrakten

(normal interfacet)


Data transport objekter dto

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;}


Data transport objekter dto1

Data transport objekter (DTO)


Session skal tillades p klienten for basichttpbinding soap 1 1

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)

<binding name="BasicHttpBinding_IRegneService" closeTimeout="00:01:00"

openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"

allowCookies="true" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"


Iis skal s ttes til asp net v4 0 mindst

IIS skal sættes til ASP.NET v4.0 (mindst)


Tilf j asynkrone metoder s wcf webservice kan k res i baggrund

Tilføj asynkrone metoderså wcf-/webservice kan køres i baggrund


Eksempel p asynkron kald af wcf service

Eksempel på Asynkron kald af Wcf-Service

delegate voidVisIntEvent(int tal); // nødvendig med

private voidVisInt(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.RegneServiceClientserviceAsync= new RegneServiceReference.RegneServiceClient(); // brug klasse

serviceAsync.AddCompleted += AddCompletedEvent;

serviceAsync.AddAsync(a, b);

}

private voidAddCompletedEvent(object sender, RegneServiceReference.AddCompletedEventArgs e)

{

int r = e.Result; // Bemærk e.Result resultatet

textBox3.Text = "" + r;

}


Eksempel p asynkron kald af asmx web service

Eksempel på Asynkron kald af asmx Web-Service

delegate voidVisIntEvent(int tal); // nødvendig med

private voidVisInt(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.WebRegneServiceSoapClientasmxService= new AsmxWebServiceReference.WebRegneServiceSoapClient();// Brug klasse

asmxService.AddCompleted += asmxAddCompletedEvent;

asmxService.AddAsync(a,b);

}

private voidasmxAddCompletedEvent(object sender, AsmxWebServiceReference.AddCompletedEventArgs e)

{

int r = e.Result; // Bemærk e.Result resultatet

textBox3.Text = "" + r;

}

}


  • Login