WCF (Windows Communication Foundation) er en sikker, pålitelig og skalerbar meldingsplattform for utvikling av tjenester i .Net. Når du jobber med WCF, må du først opprette en tjenestekontrakt og deretter definere tjenestedriften eller operasjonskontraktene i den. Du har mange forskjellige typer kontrakter i WCF - servicekontrakter, datakontrakter, feilkontrakter, meldekontrakter og operasjonskontrakter.
WCF-tjenester avslører kontrakter for å lette kommunikasjonen med tjenesteforbrukerne. En kontrakt er en standard som brukes i WCF for å spesifisere hva tjenesten skal gjøre. Kontrakter i WCF kan kategoriseres i to forskjellige kategorier:
- Behavioral Contracts: I WCF kan vi ha tre atferdskontrakter, nemlig ServiceContract, OperationContract og FaultContract.
- Strukturelle kontrakter: Disse inkluderer DataContract og MessageContract.
Servicekontrakter og driftskontrakter
En ServiceContract brukes til å betegne tjenestedriften som er tilgjengelig for tjenesteforbrukeren på et bestemt tjenestens sluttpunkt. I hovedsak brukes ServiceContract til å spesifisere operasjonene som er tilgjengelige for tjenesteklienten å konsumere. En ServiceContract er definert ved hjelp av ServiceContract-attributtet - vanligvis brukt på et grensesnitt.
En ServiceContract kan definere meldingsutvekslingsmønsteret blant tjenesteleverandøren og tjenesteforbrukeren og kan ha en eller flere tjenester. disse er kjent som driftskontrakter. En operasjonskontrakt brukes til å definere signaturen til servicemetoden og også transaksjonsflyt, retning av servicedriften og også feilkontrakten (e) som kan være assosiert.
Kodelisten som er gitt nedenfor illustrerer hvordan en typisk tjenestekontrakt defineres.
[Servicekontrakt]
grensesnitt ITestService
{
[OperationContract]
streng GetMessage ();
}
offentlig klasse TestService: ITestService
{
offentlig streng GetMessage ()
{
returner "Hello World!";
}
}
I kodelisten vist ovenfor er den eneste operasjonskontrakten i servicekontrakten GetMessage. Legg merke til hvordan attributtene er spesifisert. Også, hvis du har en metode i tjenestekontrakten din som ikke har attributtet for operasjonskontrakten satt, kan metoden ikke eksponeres av tjenesten, dvs. metoden kan ikke konsumeres av tjenesteforbrukeren.
DataContracts, MessageContracts, and FaultContracts
En DataContract brukes til å beskrive dataene som må byttes ut over ledningen. Den brukes til å spesifisere hvordan dataene kan utveksles mellom tjenesteleverandøren og tjenesteforbrukeren. Du kan bruke attributtet [DataContract] til å dekorere typen din slik at dataene kan serieiseres før de sendes over ledningen. Når du definerer datakontrakter, må du vanligvis bruke datamedlemmer til å definere egenskapene til datakontrakten.
Følgende kodebit viser hvordan du kan dekorere en klasse med [DataContract] -attributtet.
[DataContract]
offentlig klasse Ansatt
{
[DataMember]
offentlig streng-ID;
[DataMember]
offentlig streng Fornavn;
[DataMember]
offentlig streng Etternavn;
}
En meldingskontrakt er en som kan brukes til å dekorere kroppen til en melding i WCF. I de fleste tilfeller trenger du ikke bruke meldingsavtaler - bruk av datakontrakter vil være tilstrekkelig. Hvis du trenger en finkornet kontroll på SOAP-meldingene dine, kan du dra nytte av meldekontrakter. Du kan bruke meldekontrakter for å få tilgang til SOAP-overskriftene.
Du kan bruke meldekontrakter til å spesifisere formatet på SOAP-meldingen som må kreves. Mens MessageHeaderAttribute kan brukes på medlemmene du vil inkludere i SOAP-overskriftene, kan MessageBodyMemberAttribute brukes til å definere medlemmene som skal være en del av kroppen til SOAP-meldingen.
Du kan definere en meldingskontrakt ved å bruke MessageContractAttribute som vist nedenfor.
[MessageContract]
offentlig klasse Transaksjon
{
[MessageHeader] offentlig DateTime-dato;
[MessageBodyMember] offentlig int beløp;
}
En feilkontrakt i WCF brukes til å definere og formidle feilene som kan oppstå når en serviceoperasjon utføres. I hovedsak kan du utnytte feilkontrakter for å overføre feilmeldingene til tjenesteforbrukeren når det oppstår en feil i tjenesten din. Merk at du kan dekorere operasjonskontraktene ved hjelp av en feilkontrakt - en servicekontrakt kan ha en eller flere feilkontrakter. Her er et eksempel som viser hvordan feilkontrakter kan brukes. Merk at to feilkontrakter kalt FaultContractOne og FaultContractTwo har blitt brukt på driftskontraktskontrakten i kodeeksemplet gitt nedenfor.
[Servicekontrakt]
grensesnittkontrakt
{
[FaultContract (typeof (FaultContractOne))]
[FaultContract (typeof (FaultContractTwo))]
[OperationContract]
streng GetMessage ();
}