Udostępnij za pośrednictwem


Działania związane z obsługą komunikatów

Działania obsługi komunikatów umożliwiają przepływom pracy wysyłanie i odbieranie komunikatów WCF. Dodając działania obsługi komunikatów do przepływu pracy, można modelować dowolne dowolne złożone wzorce wymiany komunikatów (MEP).

Wzorce wymiany komunikatów

Istnieją trzy podstawowe wzorce wymiany komunikatów:

  • Datagram — w przypadku korzystania z datagramu MEP klient wysyła komunikat do usługi, ale usługa nie odpowiada. Jest to czasami nazywane "ogień i zapominanie". Ogień i zapominanie wymiany jest taki, który wymaga potwierdzenia poza pasmem pomyślnego dostarczenia. Wiadomość może zostać utracona podczas przesyłania i nigdy nie dociera do usługi. Jeśli klient pomyślnie wyśle komunikat, nie gwarantuje, że usługa odebrała komunikat. Datagram jest podstawowym blokiem konstrukcyjnym do obsługi komunikatów, ponieważ można tworzyć własnych posłów do parlamentu na jego podstawie.

  • Request-Response — w przypadku korzystania z protokołu MEP żądania klient wysyła komunikat do usługi, usługa wykonuje wymagane przetwarzanie, a następnie wysyła odpowiedź z powrotem do klienta. Wzorzec składa się z par żądań-odpowiedzi. Przykłady wywołań żądań odpowiedzi to zdalne wywołania procedur (RPC) i żądania GET przeglądarki. Ten wzorzec jest również nazywany półdupleksem.

  • Dupleks — w przypadku korzystania z dwukierunkowego protokołu MEP klient i usługa mogą wysyłać komunikaty do siebie w dowolnej kolejności. Dwudupleksowy poseł do PE jest jak rozmowa telefoniczna, gdzie każde słowo mówione jest wiadomością.

Działania w zakresie komunikatów umożliwiają zaimplementowanie dowolnego z tych podstawowych posłów do PE, a także dowolnych złożonych posłów do parlamentu.

Działania związane z obsługą komunikatów

Program .NET Framework 4.6.1 definiuje następujące działania obsługi komunikatów:

  • Send— Użyj Send działania, aby wysłać wiadomość.

  • SendReply — Użyj działania, SendReply aby wysłać odpowiedź do odebranej wiadomości. To działanie jest używane przez usługi przepływu pracy podczas implementowania żądania/odpowiedzi mep.

  • Receive— Użyj Receive działania, aby otrzymać komunikat.

  • ReceiveReply — Użyj ReceiveReply działania, aby otrzymać wiadomość odpowiedzi. To działanie jest używane przez klientów usługi przepływu pracy podczas implementowania żądania/odpowiedzi MEP.

Działania obsługi komunikatów i wzorce wymiany komunikatów

Datagram MEP obejmuje klienta wysyłającego komunikat i usługę odbierającego komunikat. Jeśli klient jest przepływem pracy, użyj Send działania do wysłania komunikatu. Aby odebrać ten komunikat w przepływie pracy, użyj Receive działania. Wszystkie Send działania i Receive mają właściwość o nazwie Content. Ta właściwość zawiera dane wysyłane lub odbierane. Podczas implementowania dostawcy mep odpowiedzi na żądanie zarówno klient, jak i usługa używają par działań. Klient używa Send działania do wysyłania komunikatu i ReceiveReply działania w celu odbierania odpowiedzi z usługi. Te dwa działania są ze sobą skojarzone przez Request właściwość . Ta właściwość jest ustawiona na Send działanie, które wysłało oryginalną wiadomość. Usługa używa również pary skojarzonych działań: Receive i SendReply. Te dwa działania są skojarzone z właściwością Request . Ta właściwość jest ustawiona Receive na działanie, które odebrało oryginalną wiadomość. Działania ReceiveReply i SendReply , takie jak Send i Receive umożliwiają wysyłanie Message wystąpienia lub typu kontraktu komunikatu.

Ze względu na długotrwały charakter przepływów pracy ważne jest, aby wzorzec komunikacji dwukierunkowej obsługiwał również długotrwałe konwersacje. Aby obsługiwać długotrwałe konwersacje, klienci, którzy inicjują konwersację, muszą zapewnić usłudze możliwość nawiązania połączenia z powrotem w późniejszym czasie, gdy dane staną się dostępne. Na przykład żądanie zamówienia zakupu jest przesyłane do zatwierdzenia przez menedżera, ale może nie być przetwarzane przez dzień, tydzień, a nawet rok; przepływ pracy, który zarządza zatwierdzeniem zamówienia zakupu, musi wiedzieć, aby wznowić po zatwierdzeniu. Ten wzorzec komunikacji dwukierunkowej jest obsługiwany w przepływach pracy przy użyciu korelacji. Aby zaimplementować wzorzec dwukierunkowy, użyj funkcji Send i Receive działań. W działaniu zainicjuj Receive korelację przy użyciu polecenia CorrelationHandle. W zestawie działań ta korelacja Send obsługuje jako CorrelatesWith wartość właściwości. Aby uzyskać więcej informacji, zobacz Durable Duplex.

Uwaga

Implementacja dwukierunkowego przepływu pracy przy użyciu korelacji wywołania zwrotnego ("Durable Duplex") jest przeznaczona do długotrwałych konwersacji. Nie jest to takie samo, jak dwukierunkowy WCF z kontraktami wywołania zwrotnego, w których konwersacja jest krótka (okres istnienia kanału).

Działania związane z formatowaniem komunikatów i obsługą komunikatów

Działania Receive i ReceiveReply mają właściwość o nazwie Content. Ta właściwość jest typu ReceiveContent i reprezentuje dane odbierane przez Receive działanie lub ReceiveReply . Program .NET Framework definiuje dwie powiązane klasy o nazwie ReceiveMessageContent i ReceiveParametersContent obie te klasy pochodzą z ReceiveContentklasy . Receive Ustaw właściwość lub ReceiveReplyContent na wystąpienie jednego z tych typów, aby odbierać dane do usługi przepływu pracy. Typ do użycia zależy od typu danych odbieranych przez działanie. Jeśli działanie odbiera Message obiekt lub typ kontraktu komunikatu, użyj polecenia ReceiveMessageContent. Jeśli działanie odbiera zestaw kontraktów danych lub typów XML, które mogą być serializowane, użyj polecenia ReceiveParametersContent. ReceiveParametersContent Umożliwia wysyłanie wielu parametrów, natomiast ReceiveMessageContent umożliwia wysyłanie tylko jednego obiektu, komunikatu (lub typu kontraktu komunikatu).

Uwaga

ReceiveMessageContent Można również używać z pojedynczym kontraktem danych lub typem XML, który można serializować. Różnica między użyciem ReceiveParametersContent z pojedynczym parametrem a obiektem przekazywanym bezpośrednio do ReceiveMessageContent jest format przewodu. Zawartość parametru jest opakowana w element XML, który odpowiada nazwie operacji, a serializowany obiekt jest opakowany w element XML przy użyciu nazwy parametru (na przykład <Echo><msg>Hello, World</msg></Echo>). Zawartość wiadomości nie jest opakowana przez nazwę operacji. Zamiast tego serializowany obiekt jest umieszczany w elemecie XML przy użyciu nazwy typu kwalifikowanego xml (na przykład <string>Hello, World</string>).

Działania Send i SendReply mają również właściwość o nazwie Content. Ta właściwość jest typu SendContent i reprezentuje dane wysyłane przez Send działanie lub SendReply . Program .NET Framework definiuje dwa powiązane typy o nazwie SendMessageContent i SendParametersContent oba z nich pochodzą z SendContentelementu . Send Ustaw właściwość lub SendReplyContent na wystąpienie jednego z tych typów, aby wysyłać dane z usługi przepływu pracy. Typ do użycia zależy od typu danych, które wysyła działanie. Jeśli działanie wysyła Message obiekt lub typ kontraktu komunikatu, użyj polecenia SendMessageContent. Jeśli działanie wysyła typ kontraktu danych, użyj polecenia SendParametersContent. SendParametersContent Umożliwia wysyłanie wielu parametrów, natomiast SendMessageContent umożliwia wysyłanie tylko jednego obiektu, komunikatu (lub typu kontraktu komunikatu).

Podczas programowania w sposób imperatywnie z działaniami obsługi komunikatów należy użyć ogólnego InArgument<T> i OutArgument<T> zawijać obiekty przypisywane do właściwości Sendkomunikatu lub parametrów działań , , SendReplyReceivei ReceiveReply . Służy InArgument<T> do Send działań i SendReply oraz OutArgument<T> dla i ReceiveReply działańReceive. In argumenty są używane z działaniami wysyłania, ponieważ dane są przekazywane do działań. Out argumenty są używane z działaniami odbierania, ponieważ dane są przekazywane z działań, jak pokazano w poniższym przykładzie.

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

Podczas implementowania usługi przepływu pracy, która definiuje operację żądania/odpowiedzi zwracającą wartość void, należy utworzyć wystąpienie SendReply działania i ustawić Content właściwość na puste wystąpienie jednego z typów zawartości (SendMessageContent lub SendParametersContent), jak pokazano w poniższym przykładzie.

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

Dodawanie dokumentacji usługi

Podczas wywoływania usługi przepływu pracy z aplikacji przepływu pracy program Visual Studio 2012 generuje niestandardowe działania obsługi komunikatów, które hermetyzują zwykłe Send działania i ReceiveReply działania używane w żądaniu/odpowiedzi mep. Aby użyć tej funkcji, kliknij prawym przyciskiem myszy projekt klienta w programie Visual Studio i wybierz polecenie Dodaj>odwołanie do usługi. Wpisz podstawowy adres usługi w polu adresu i kliknij przycisk Przejdź. Dostępne usługi są wyświetlane w polu Usługi: Rozwiń węzeł usługi, aby wyświetlić obsługiwane kontrakty. Wybierz kontrakt, który chcesz wywołać, a lista dostępnych operacji jest wyświetlana w polu Operacje . Następnie możesz określić przestrzeń nazw wygenerowanego działania i kliknąć przycisk OK. Następnie zostanie wyświetlone okno dialogowe z informacją, że operacja została ukończona pomyślnie i że wygenerowane działania niestandardowe znajdują się w przyborniku po ponownym skompilowanym projekcie. Istnieje jedno działanie dla każdej operacji zdefiniowanej w kontrakcie usługi. Po odbudowaniu projektu można przeciągnąć i upuścić działania niestandardowe do przepływu pracy i ustawić wszystkie wymagane właściwości w oknie właściwości.

Szablony działań obsługi komunikatów

Aby ułatwić skonfigurowanie dostawcy mep żądania/odpowiedzi na kliencie i usłudze, program Visual Studio 2012 udostępnia dwa szablony działań obsługi komunikatów. System.ServiceModel.Activities.Design.ReceiveAndSendReply jest używany w usłudze i System.ServiceModel.Activities.Design.SendAndReceiveReply jest używany na kliencie. W obu przypadkach szablony dodają odpowiednie działania obsługi komunikatów do przepływu pracy. W usłudze dodaje System.ServiceModel.Activities.Design.ReceiveAndSendReplyReceive działanie, po którym następuje SendReply działanie. Właściwość Request jest automatycznie ustawiana na Receive działanie. Na kliencie program System.ServiceModel.Activities.Design.SendAndReceiveReply dodaje Send działanie, po którym następuje polecenie ReceiveReply. Właściwość Request jest automatycznie ustawiana na Send działanie. Aby użyć tych szablonów, przeciągnij i upuść odpowiedni szablon do przepływu pracy.

Działania i transakcje obsługi komunikatów

Po wywołaniu usługi przepływu pracy możesz chcieć przekazać transakcję do operacji usługi. Aby to zrobić, Receive umieść działanie w ramach TransactedReceiveScope działania. Działanie TransactedReceiveScope zawiera Receive działanie i treść. Transakcja przepływa do usługi pozostaje otoczenia w trakcie wykonywania treści obiektu TransactedReceiveScope. Transakcja jest zakończona po zakończeniu wykonywania treści. Aby uzyskać więcej informacji na temat przepływów pracy i transakcji, zobacz Transakcje przepływu pracy.

Zobacz też