Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í". Systém odeslání bez zpětné vazby je ten, který vyžaduje potvrzení úspěšného doručení mimo hlavní tok. 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í typu požadavek-odezva zahrnují vzdálená volání procedur (RPC) a GET požadavky prohlížeče. Tento model se také označuje jako poloduplex.
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é je řečeno, 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 – Použijte aktivitu ReceiveReply, abyste přijali odpovědní zprávu. Tato aktivita je používána klienty služby pro pracovní postup při implementaci modelu žádost/odpověď (MEP).
Aktivity zasílání zpráv a vzory výměny zpráv
Datagramové MEP zahrnuje klienta, který odesílá zprávu, a službu, která zprávu přijímá. Je-li klient součástí pracovního postupu, použijte aktivitu Send k odeslání zprávy. Pokud chcete tuto zprávu přijmout v pracovním postupu, použijte Receive aktivitu. Aktivity Send a Receive mají každá vlastnost s názvem Content. Tato vlastnost obsahuje data, která se odesílají nebo přijímají. Při implementaci párového MEP požadavek-odpověď používají klient i služba soubory 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 na Receive aktivitu, která přijala původní zprávu. Aktivity ReceiveReply a SendReply, jako například Send a Receive, umožňují odeslání instance Message nebo typu 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. Na sadě aktivit Send nastavte korelační úchyt jako CorrelatesWith hodnotu vlastnosti. Další informace naleznete v tématu Durable Duplex.
Poznámka:
Implementace duplexu v rámci pracovního postupu pomocí zpětnovolací korelace (Durable Duplex) je určená pro dlouhotrvající dialogy. To není totéž jako WCF duplex s kontrakty pro zpětné volání, kde konverzace má krátké trvání (doba života kanálu).
Formátování zpráv a aktivity zasílání zpráv
Aktivity Receive a ReceiveReply mají vlastnost s názvem Content. Tato vlastnost je typu ReceiveContent a představuje data, která aktivita Receive nebo ReceiveReply přijímá. Rozhraní .NET Framework definuje dvě související třídy, které jsou volány ReceiveMessageContent a ReceiveParametersContent obě jsou odvozeny z ReceiveContent. Nastavte vlastnost aktivity Receive nebo ReceiveReplyContent na instanci jednoho z těchto typů, abyste mohli přijímat data 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 spočívá ve formátu přenosu dat. 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>).
Aktivity Send a SendReply 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é se nazývají SendMessageContent a SendParametersContent, a z nichž oba jsou odvozeny z SendContent. Nastavte vlastnost Send aktivity SendReply nebo Content 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žijte 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 imperativním programování s aktivitami zasílání zpráv použijete obecný InArgument<T> a OutArgument<T>, abyste zabalili objekty, které přiřadíte ke zprávě nebo vlastnostem parametrů aktivit Send, SendReply, Receive a ReceiveReply. Používejte InArgument<T> pro aktivity Send a SendReply a OutArgument<T> pro aktivity Receive a 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í u přijímacích aktivit, protože se data předávají 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é aktivity Send a ReceiveReply používané v rámci vzoru požadavek/odpověď MEP. 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 smlouvu, kterou chcete aktivovat, 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.ReceiveAndSendReplyReceive 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í služby pracovního postupu můžete chtít předat transakci k operaci služby. Pro umístění Receive aktivity použijte vnoření do TransactedReceiveScope aktivity. Aktivita TransactedReceiveScope obsahuje Receive aktivitu a tělo. Transakce přesměrovaná do služby zůstává aktivní během provádění těla TransactedReceiveScope. Transakce je dokončena, když se tělo kódu dokončí provádět. Další informace o pracovních postupech a transakcích zobrazíte v Workflow Transactions.