Aktivity zasílání zpráv
Aktivity zasílání zpráv umožňují pracovním postupům odesílat a přijímat zprávy WCF. Přidáním aktivit zasílání zpráv do pracovního postupu můžete modelovat libovolné složité vzory výměny zpráv (MEP).
Vzory výměny zpráv
Existují tři základní vzory výměny zpráv:
Datagram – Při použití mep datagramu odešle klient do služby zprávu, ale služba neodpovědí. Někdy se tomu říká "oheň a zapomenutí". Oheň a zapomenutá výměna je ta, která vyžaduje potvrzení úspěšného doručení mimo pásmo. Zpráva může být ztracena při přenosu a nikdy se nedostanou ke službě. Pokud klient úspěšně odešle zprávu, nezaručuje, že služba zprávu přijala. Datagram je základním stavebním blokem pro zasílání zpráv, protože nad ním můžete vytvářet své vlastní poslance.
Request-Response – Při použití mep požadavku-odpověď odešle klient do služby zprávu, služba provede požadované zpracování a pak odešle odpověď zpět klientovi. Vzor se skládá z párů požadavků a odpovědí. Příklady volání požadavků a odpovědí jsou vzdálená volání procedur (RPC) a požadavky GET prohlížeče. Tento model se také označuje jako polo duplexní.
Duplex – Při použití duplexního MEP může klient a služba posílat zprávy navzájem v libovolném pořadí. Duplexní MEP je jako telefonní konverzace, kde každé slovo, které se mluví, je zpráva.
Aktivity zasílání zpráv umožňují implementovat všechny tyto základní poslance EVROPSKÉHO parlamentu i libovolně složitého poslance EVROPSKÉHO parlamentu.
Aktivity zasílání zpráv
Rozhraní .NET Framework 4.6.1 definuje následující aktivity zasílání zpráv:
SendReply – Pomocí SendReply aktivity odešlete odpověď na přijatou zprávu. Tato aktivita je používána službami pracovních postupů při implementaci žádosti/odpovědi mep.
ReceiveReply – Aktivita slouží ReceiveReply k přijetí zprávy odpovědi. Tato aktivita se používá klienty služby pracovního postupu při implementaci žádosti/odpovědi MEP.
Aktivity zasílání zpráv a vzory výměny zpráv
Mep datagramu zahrnuje klienta, který odesílá zprávu a službu, která zprávu přijímá. Pokud je klient pracovním postupem, použijte Send aktivitu k odeslání zprávy. Pokud chcete tuto zprávu přijmout v pracovním postupu, použijte Receive aktivitu. Každá z Send nich má vlastnost s názvem Content
.Receive Tato vlastnost obsahuje data, která se odesílají nebo přijímají. Při implementaci MEP odpovědi na požadavek klient i služba používají páry aktivit. Klient používá Send aktivitu k odeslání zprávy a ReceiveReply aktivitě pro příjem odpovědi ze služby. Tyto dvě aktivity jsou vzájemně spojené vlastností Request . Tato vlastnost je nastavena Send na aktivitu, která odeslala původní zprávu. Služba také používá dvojici přidružených aktivit: Receive a SendReply. Tyto dvě aktivity jsou přidruženy vlastností Request . Tato vlastnost je nastavena Receive na aktivitu, která přijala původní zprávu. Aktivity ReceiveReply a SendReply aktivity, například Send a Receive umožňují odeslat Message instanci nebo typ kontraktu zprávy.
Vzhledem k dlouhotrvající povaze pracovních postupů je důležité, aby duplexní způsob komunikace podporoval i dlouhotrvající konverzace. Pro podporu dlouhotrvajících konverzací musí klienti, kteří konverzaci zahájili, poskytnout službě příležitost volat ji později, až budou data k dispozici. Například žádost o nákupní objednávku se odešle ke schválení nadřízeným, ale nemusí být zpracována za den, týden nebo dokonce rok; pracovní postup, který spravuje schválení nákupní objednávky, musí vědět, aby bylo možné pokračovat po schválení. Tento model duplexní komunikace je podporován v pracovních postupech pomocí korelace. K implementaci duplexního vzoru použijte Send a Receive aktivity. V aktivitě Receive inicializovat korelaci pomocí CorrelationHandle. Send Na sadě aktivit, která zpracovává korelaci jako CorrelatesWith hodnotu vlastnosti. Další informace naleznete v tématu Durable Duplex.
Poznámka:
Implementace duplexního pracovního postupu pomocí korelace zpětného volání (Durable Duplex) je určená pro dlouhotrvající konverzace. To není totéž jako wcf duplexní s kontrakty zpětného volání, kde konverzace je krátká (doba života kanálu).
Formátování zpráv a aktivity zasílání zpráv
ReceiveReply Aktivity Receive mají vlastnost s názvem Content
. Tato vlastnost je typu ReceiveContent a představuje data, která Receive přijímá aktivita ReceiveReply . Rozhraní .NET Framework definuje dvě související třídy, které jsou volány ReceiveMessageContent a ReceiveParametersContent obě jsou odvozeny z ReceiveContent. Receive Nastavte vlastnost aktivity ReceiveReplyContent
na instanci jednoho z těchto typů pro příjem dat do služby pracovního postupu. Typ, který se má použít, závisí na typu dat, která aktivita přijímá. Pokud aktivita obdrží Message
objekt nebo typ kontraktu zprávy, použijte ReceiveMessageContent. Pokud aktivita obdrží sadu datových kontraktů nebo xml typů, které lze serializovat, použijte ReceiveParametersContent. ReceiveParametersContent umožňuje odesílat více parametrů, zatímco ReceiveMessageContent umožňuje odesílat pouze jeden objekt, zprávu (nebo typ kontraktu zprávy).
Poznámka:
ReceiveMessageContent lze použít také s jedním datovým kontraktem nebo typem XML, který lze serializovat. Rozdíl mezi použitím ReceiveParametersContent s jedním parametrem a objektem předaným přímo ReceiveMessageContent je wire-format. Obsah parametru je zabalen do elementu XML, který odpovídá názvu operace a serializovaný objekt je zabalen do elementu XML pomocí názvu parametru (například <Echo><msg>Hello, World</msg></Echo>
). Obsah zprávy není zabalený názvem operace. Místo toho se serializovaný objekt umístí do elementu XML pomocí názvu typu kvalifikovaného xml (například <string>Hello, World</string>
).
SendReply Aktivity Send mají také vlastnost s názvem Content
. Tato vlastnost je typu SendContent a představuje data, která SendSendReply aktivita odesílá. Rozhraní .NET Framework definuje dva související typy, které jsou volány SendMessageContent a SendParametersContent z nichž oba jsou odvozeny .SendContent Send Nastavte vlastnost aktivity SendReplyContent
na instanci jednoho z těchto typů pro odesílání dat ze služby pracovního postupu. Typ, který se má použít, závisí na typu dat, která aktivita odesílá. Pokud aktivita odešle Message
objekt nebo typ kontraktu zprávy, použijte SendMessageContent. Pokud aktivita odešle datový typ kontraktu použít SendParametersContent. SendParametersContent umožňuje odesílat více parametrů, zatímco SendMessageContent umožňuje odesílat pouze jeden objekt, zprávu (nebo typ kontraktu zprávy).
Při programování imperativních aktivit zasílání zpráv použijete obecný InArgument<T> a OutArgument<T> zabalíte objekty, které přiřadíte ke zprávě nebo parametrům vlastností Send, SendReply, Receivea ReceiveReply aktivit. Používejte InArgument<T> je Send pro aktivity a OutArgument<T>SendReplyReceive aktivity a aktivity.ReceiveReply In
Argumenty se používají s aktivitami odesílání, protože data se předávají do aktivit. Out
Argumenty se používají s aktivitami příjmu, protože se předávají data z aktivit, jak je znázorněno v následujícím příkladu.
Receive reserveSeat = new Receive
{
...
Content = new ReceiveParametersContent
{
Parameters =
{
{ "ReservationInfo", new OutArgument<ReservationRequest>(reservationInfo) }
}
}
};
SendReply reserveSeat = new SendReply
{
...
Request = reserveSeat,
Content = new SendParametersContent
{
Parameters =
{
{ "ReservationId", new InArgument<string>(reservationId) }
}
},
};
Při implementaci služby pracovního postupu, která definuje operaci požadavku/odpovědi, která vrací hodnotu void, musíte vytvořit instanci SendReply aktivity a nastavit Content vlastnost na prázdnou instanci jednoho z typů obsahu (SendMessageContent nebo SendParametersContent) tak, jak je znázorněno v následujícím příkladu.
Receive rcv = new Receive()
{
ServiceContractName = "IService",
OperationName = "NullReturningContract",
Content = new ReceiveParametersContent( new Dictionary<string, OutArgument>() { { "message", new OutArgument<string>() } } )
};
SendReply sr = new SendReply()
{
Request = rcv
Content = new SendParametersContent();
};
Přidání odkazu na službu
Při volání služby pracovního postupu z aplikace pracovního postupu generuje Visual Studio 2012 vlastní aktivity zasílání zpráv, které zapouzdřují obvyklé Send aktivity a aktivity používané v programu MEP pro žádosti a ReceiveReply odpovědi. Pokud chcete tuto funkci použít, klikněte pravým tlačítkem myši na projekt klienta v sadě Visual Studio a vyberte Přidat>odkaz na službu. Do pole Adresa zadejte základní adresu služby a klepněte na tlačítko Přejít. Dostupné služby se zobrazí v poli Služby: Rozbalte uzel služby a zobrazte podporované kontrakty. Vyberte kontrakt, který chcete volat, a v poli Operace se zobrazí seznam dostupných operací. Pak můžete zadat obor názvů pro vygenerovanou aktivitu a klepněte na tlačítko OK. Zobrazí se dialogové okno s informací, že operace byla úspěšně dokončena a že vygenerované vlastní aktivity jsou na panelu nástrojů po vytvoření projektu. Pro každou operaci definovanou v kontraktu služby existuje jedna aktivita. Po opětovném sestavení projektu můžete přetáhnout vlastní aktivity do pracovního postupu a nastavit požadované vlastnosti v okně vlastností.
Šablony aktivit zasílání zpráv
Visual Studio 2012 poskytuje dvě šablony aktivit zasílání zpráv, které usnadňují nastavení mep pro žádosti a odpovědi v klientovi a službě. System.ServiceModel.Activities.Design.ReceiveAndSendReply
se používá ve službě a System.ServiceModel.Activities.Design.SendAndReceiveReply
používá se v klientovi. V obou případech šablony přidávají do pracovního postupu příslušné aktivity zasílání zpráv. Ve službě přidá System.ServiceModel.Activities.Design.ReceiveAndSendReply
Receive aktivitu následovanou aktivitou SendReply . Vlastnost Request se automaticky nastaví na Receive aktivitu. Na klientovi System.ServiceModel.Activities.Design.SendAndReceiveReply
přidá Send aktivitu následovanou .ReceiveReply Vlastnost Request se automaticky nastaví na Send aktivitu. Pokud chcete tyto šablony použít, stačí přetáhnout příslušnou šablonu do pracovního postupu.
Aktivity a transakce zasílání zpráv
Při volání do služby pracovního postupu můžete chtít tok transakce do operace služby. Chcete-li to provést, Receive umístěte aktivitu do TransactedReceiveScope aktivity. Aktivita TransactedReceiveScope obsahuje Receive
aktivitu a tělo. Transakce teče do služby zůstává okolí během provádění těla TransactedReceiveScopetěla . Transakce se dokončí po dokončení provádění textu. Další informace o pracovních postupechachch