Programování

Moje dva centy za smlouvy ve WCF

WCF (Windows Communication Foundation) je bezpečná, spolehlivá a škálovatelná platforma pro zasílání zpráv pro vývoj služeb v .Net. Při práci s WCF musíte nejprve vytvořit servisní smlouvu a poté v ní definovat provozní operace nebo provozní smlouvy. Ve službě WCF máte mnoho různých typů kontraktů - smlouvy o službách, smlouvy o datech, smlouvy o chybách, smlouvy o zprávách a smlouvy o provozu.

Služby WCF zveřejňují smlouvy, které usnadňují komunikaci se spotřebiteli služeb. Kontrakt je standard, který se používá v WCF k určení, co má služba dělat. Smlouvy ve WCF lze rozdělit do dvou různých kategorií:

  • Behaviorální kontrakty: V WCF můžeme mít tři behaviorální kontrakty, jmenovitě ServiceContract, OperationContract a FaultContract.
  • Strukturální smlouvy: Patří mezi ně DataContract a MessageContract.

ServiceContracts a OperationContracts

ServiceContract se používá k označení operací služby, které jsou k dispozici pro spotřebitele služby v konkrétním koncovém bodu služby. V podstatě se ServiceContract používá k určení operací, které jsou klientovi služby k dispozici ke konzumaci. ServiceContract je definován pomocí atributu ServiceContract - obvykle aplikovaného na rozhraní.

ServiceContract může definovat vzor výměny zpráv mezi poskytovatelem služeb a spotřebitelem služby a může mít jednu nebo více operací služby; tito jsou známí jako provozní smlouvy. Smlouva o operaci se používá k definování podpisu metody služby a také toku transakcí, směru operace služby a také kontraktu (poruch), které mohou být spojeny.

Níže uvedený seznam kódů ukazuje, jak je definována typická servisní smlouva.

[ServiceContract]

rozhraní ITestService

{

[OperationContract]

řetězec GetMessage ();

}

veřejná třída TestService: ITestService

{

veřejný řetězec GetMessage ()

      {

návrat "Hello World!";

      }

}

V seznamu kódů zobrazeném výše je jedinou smlouvou o provozu ve smlouvě o službě GetMessage. Všimněte si, jak byly zadány atributy. Také, pokud máte ve své smlouvě o službě metodu, která nemá nastavený atribut kontraktu kontraktu, metodu nelze vystavit službou, tj. Metodu nemůže spotřebovat spotřebitel služby.

DataContracts, MessageContracts a FaultContracts

DataContract se používá k popisu dat, která je třeba vyměnit po drátu. Používá se k určení, jak lze data vyměňovat mezi poskytovatelem služby a spotřebitelem služby. Atribut [DataContract] můžete použít k výzdobě svého typu, aby bylo možné data serializovat, než budou předána po drátu. Při definování kontraktů dat byste obvykle museli používat datové členy k definování vlastností kontraktu dat.

Následující fragment kódu ukazuje, jak můžete zdobit třídu pomocí atributu [DataContract].

[DataContract]

veřejná třída Zaměstnanec

{

[DataMember]

veřejné ID řetězce;

[DataMember]

veřejný řetězec Jméno;

[DataMember]

veřejný řetězec Příjmení;

}

Smlouva o zprávě je smlouva, kterou lze použít k výzdobě těla zprávy v WCF. Ve většině případů byste nemuseli používat smlouvy na zprávy - stačilo by použití datových smluv. Pokud potřebujete jemnou kontrolu nad svými zprávami SOAP, můžete využít výhod kontraktů se zprávami. Pro přístup k hlavičkám SOAP můžete použít smlouvy se zprávami.

Pomocí kontraktů zpráv můžete určit formát zprávy SOAP, který je třeba vyžadovat. Zatímco MessageHeaderAttribute lze použít na členy, které chcete zahrnout do záhlaví SOAP, MessageBodyMemberAttribute lze použít k definování členů, kteří by měli být součástí těla zprávy SOAP.

Smlouvu na zprávu můžete definovat pomocí MessageContractAttribute, jak je znázorněno níže.

[MessageContract]

transakce veřejné třídy

{

[MessageHeader] public DateTime datum;

[MessageBodyMember] public int částka;

}

Kontrakt poruchy v WCF se používá k definování a šíření chyb, ke kterým může dojít při provedení operace služby. V podstatě můžete využít kontrakty poruch k předání chybových zpráv spotřebiteli služby, když ve vaší službě dojde k chybě. Všimněte si, že své provozní smlouvy můžete vyzdobit pomocí smlouvy o poruše - smlouva o provozu služby může mít přidruženou jednu nebo více smluv o poruše. Tady je příklad, který ukazuje, jak lze smlouvy o chybách použít. Všimněte si, že dvě kontrakty poruch s názvem FaultContractOne a FaultContractTwo byly použity na kontrakt smlouvy o provozu v příkladu kódu uvedeném níže.

[ServiceContract]

Smlouva o rozhraní

{

[FaultContract (typeof (FaultContractOne))]

[FaultContract (typeof (FaultContractTwo))]

[OperationContract]

řetězec GetMessage ();

 }