Co nowego w programie Windows Workflow Foundation w .NET Framework 4.5

Program Windows Workflow Foundation (WF) w .NET Framework 4.5 wprowadza wiele nowych funkcji, takich jak nowe działania, możliwości projektanta i modele programowania przepływu pracy. Wiele, ale nie wszystkie, nowe funkcje przepływu pracy wprowadzone w .NET Framework 4.5 są obsługiwane w projektancie ponownie hostowanego przepływu pracy. Aby uzyskać więcej informacji o nowych obsługiwanych funkcjach, zobacz Support for New Workflow Foundation 4.5 Features in the Rehosted Workflow Designer (Obsługa nowych funkcji programu Workflow Foundation 4.5) w projektancie ponownie hostowanych przepływów pracy. Aby uzyskać więcej informacji na temat migrowania aplikacji przepływu pracy .NET Framework 3.0 i .NET Framework 3.5 do korzystania z najnowszej wersji, zobacz Wskazówki dotyczące migracji. Ten artykuł zawiera omówienie nowych funkcji przepływu pracy wprowadzonych w .NET Framework 4.5.

Ostrzeżenie

Nowe funkcje programu Windows Workflow Foundation wprowadzone w .NET Framework 4.5 nie są dostępne dla projektów przeznaczonych dla poprzednich wersji platformy. Jeśli projekt docelowy .NET Framework 4.5 zostanie ponownie skierowany do poprzedniej wersji platformy, może wystąpić kilka problemów.

  • Wyrażenia języka C# zostaną zastąpione w projektancie wartością komunikatu ustawioną w języku XAML.
  • Wystąpi wiele błędów kompilacji, w tym następujący błąd.

Format pliku nie jest zgodny z bieżącą platformą docelową. Aby przekonwertować format pliku, jawnie zapisz plik. Ten komunikat o błędzie zniknie po zapisaniu pliku i ponownym otwarciu projektanta.

Przechowywanie wersji przepływu pracy

.NET Framework 4.5 wprowadzono kilka nowych funkcji przechowywania wersji opartych na nowej WorkflowIdentity klasie. WorkflowIdentity udostępnia autorom aplikacji przepływu pracy mechanizm mapowania utrwalonego wystąpienia przepływu pracy z jego definicją.

Działania

Wbudowana biblioteka działań zawiera nowe działania i nowe funkcje dla istniejących działań.

Zakres NoPersist

NoPersistScope to nowe działanie kontenera, które uniemożliwia utrwalanie przepływu pracy, gdy działania podrzędne NoPersistScope są wykonywane. Jest to przydatne w scenariuszach, w których przepływ pracy nie jest odpowiedni do utrwalonego przepływu pracy, na przykład gdy przepływ pracy korzysta z zasobów specyficznych dla maszyny, takich jak dojścia do plików lub transakcji bazy danych. Wcześniej, aby zapobiec wystąpieniu trwałości podczas wykonywania działania, wymagany był niestandardowy NativeActivity , który używał NoPersistHandle elementu .

Nowe możliwości schematu blokowego

Schematy blokowe są aktualizowane dla .NET Framework 4.5 i mają następujące nowe możliwości:

  • FlowSwitch<T> Właściwość DisplayName działania lub FlowDecision jest edytowalna. Pozwoli to projektantowi działań wyświetlić więcej informacji na temat celu działania.

  • Schematy blokowe mają nową właściwość o nazwie ValidateUnconnectedNodes; wartość domyślna dla tej właściwości to False. Jeśli ta właściwość jest ustawiona na Truewartość , węzły schematu blokowego niepodłączone spowodują błędy walidacji.

Obsługa częściowego zaufania

Przepływy pracy w .NET Framework 4 wymagały w pełni zaufanej domeny aplikacji. W .NET Framework 4.5 przepływy pracy mogą działać w środowisku częściowo zaufania. W środowisku częściowo zaufania składniki innych firm mogą być używane bez udzielania im pełnego dostępu do zasobów hosta. Niektóre obawy dotyczące uruchamiania przepływów pracy w częściowej relacji zaufania są następujące:

  1. Używanie starszych składników (w tym reguł) zawartych w działaniu nie jest obsługiwane w Interop ramach częściowego zaufania.

  2. Uruchamianie przepływów pracy w częściowym zaufaniu WorkflowServiceHost nie jest obsługiwane.

  3. Utrwalanie wyjątków w scenariuszu częściowo zaufanym jest potencjalnym zagrożeniem bezpieczeństwa. Aby wyłączyć utrwalanie wyjątków, należy dodać rozszerzenie typu ExceptionPersistenceExtension do projektu, aby zrezygnować z utrwalania wyjątków. W poniższym przykładzie kodu pokazano, jak zaimplementować ten typ.

    public class ExceptionPersistenceExtension
    {
        public ExceptionPersistenceExtension()
        {
            this.PersistExceptions = false;
        }
        public bool PersistExceptions { get; set; }
    }
    

    Jeśli wyjątki nie mają być serializowane, upewnij się, że wyjątki są używane w obiekcie NoPersistScope.

  4. Autorzy działań powinni zastąpić, CacheMetadata aby uniknąć automatycznego wykonywania odbicia środowiska uruchomieniowego przepływu pracy względem typu. Argumenty i działania podrzędne muszą być niepuste i Bind muszą być wywoływane jawnie. Aby uzyskać więcej informacji na temat zastępowania CacheMetadata, zobacz Udostępnianie danych za pomocą metody CacheMetadata. Ponadto wystąpienia argumentów, które są typu lub internalprywatny , muszą zostać jawnie utworzone, CacheMetadata aby uniknąć tworzenia przez odbicie.

  5. Typy nie będą używane ISerializable ani SerializableAttribute do serializacji; typy, które mają być serializowane, muszą obsługiwać .DataContractSerializer

  6. Wyrażenia, które używają LambdaValue<TResult>RestrictedMemberAccessmetody , i w związku z tym nie będą działać w ramach częściowego zaufania. Przepływy pracy, które używają LambdaValue<TResult> , powinny zastąpić te wyrażenia działaniami pochodzącymi z CodeActivity<TResult>elementu . .

  7. Nie można skompilować wyrażeń przy użyciu TextExpressionCompiler ani kompilatora hostowanego w języku Visual Basic w częściowym zaufaniu, ale wcześniej skompilowane wyrażenia można uruchomić.

  8. W .NET Framework 4 nie można używać pojedynczego zestawu, który używa przezroczystości poziomu 2, .NET Framework 4.6.1 w pełnym zaufaniu i .NET Framework 4.6.1 w częściowej relacji zaufania.

Nowe możliwości projektanta

Wyszukiwanie projektanta

Aby zwiększyć możliwości zarządzania większymi przepływami pracy, przepływy pracy można teraz przeszukiwać według słowa kluczowego. Ta funkcja jest dostępna tylko w programie Visual Studio; ta funkcja nie jest dostępna w projektancie ponownie hostowanych. Dostępne są dwa rodzaje wyszukiwań:

  • Szybkie wyszukiwanie, inicjowane za pomocą klawiszy Ctrl+F lub Edytuj, Znajdź i zamień, Szybkie znajdowanie.

  • Znajdź w plikach, zainicjowane za pomocą klawiszy Ctrl+Shift+F lub Edytuj, Znajdź i Zastąp, Znajdź w plikach.

Należy pamiętać, że funkcja Replace nie jest obsługiwana.

Szybkie wyszukiwanie

Słowa kluczowe przeszukane w przepływach pracy będą zgodne z następującymi elementami projektanta:

  • Activity Właściwości obiektów, FlowNode obiektów, State obiektów, obiektów, Transition obiektów i innych niestandardowych elementów sterowania przepływem.

  • Zmienne

  • Argumenty

  • Wyrażenia

Szybkie wyszukiwanie jest wykonywane na drzewie projektanta ModelItem . Funkcja Szybkie wyszukiwanie nie będzie znajdować przestrzeni nazw zaimportowanych w definicji przepływu pracy.

Znajdź w plikach

Słowa kluczowe przeszukane w przepływach pracy będą zgodne z rzeczywistą zawartością plików przepływu pracy. Wyniki wyszukiwania będą wyświetlane w okienku Widok wyszukiwania w programie Visual Studio. Dwukrotne kliknięcie elementu wyniku spowoduje przejście do działania zawierającego dopasowanie w projektancie przepływu pracy.

Usuwanie elementu menu kontekstowego w projektancie zmiennych i argumentów

W .NET Framework 4 zmienne i argumenty można usunąć tylko w projektancie przy użyciu klawiatury. Począwszy od .NET Framework 4.5, zmienne i argumenty można usunąć przy użyciu menu kontekstowego.

Poniższy zrzut ekranu przedstawia menu kontekstowe projektanta zmiennych i argumentów.

Menu kontekstowe projektanta zmiennych i argumentów

Automatyczne otaczanie za pomocą sekwencji

Ponieważ przepływ pracy lub niektóre działania kontenera (takie jak NoPersistScope) mogą zawierać tylko jedno działanie treści, dodanie drugiego działania wymaganego przez dewelopera do usunięcia pierwszego działania, dodanie Sequence działania, a następnie dodanie obu działań do działania sekwencji. Począwszy od .NET Framework 4.5, podczas dodawania drugiego działania do powierzchni Sequence projektanta działanie zostanie automatycznie utworzone w celu opakowania obu działań.

Poniższy zrzut ekranu przedstawia WriteLine działanie w elemecie NoPersistScopeBody .

Działanie WriteLine w treści działania NoPersistScope.

Poniższy zrzut ekranu przedstawia automatycznie utworzone Sequence działanie w Body przypadku porzucania sekundy WriteLine poniżej pierwszego.

Automatycznie utworzona sekwencja w treści noPersistScope.

Tryb przesuwania

Aby łatwiej poruszać się po dużym przepływie pracy w projektancie, można włączyć tryb panowania, umożliwiając deweloperowi kliknięcie i przeciągnięcie w celu przeniesienia widocznej części przepływu pracy, a nie konieczności używania pasków przewijania. Przycisk aktywowania trybu panowania znajduje się w prawym dolnym rogu projektanta.

Poniższy zrzut ekranu przedstawia przycisk pan, który znajduje się w prawym dolnym rogu projektanta przepływu pracy.

Przycisk pan wyróżniony w projektancie przepływu pracy.

Środkowy przycisk myszy lub pasek spacji można również użyć do przesuwania projektanta przepływu pracy.

Wybór wielokrotny

Wiele działań można wybrać jednocześnie, przeciągając prostokąt wokół nich (gdy tryb patelni nie jest włączony), lub przytrzymując klawisze Ctrl i klikając żądane działania jeden po drugim.

Wiele zaznaczeń działań można również przeciągać i upuszczać w projektancie, a także korzystać z menu kontekstowego.

Widok konspektu elementów przepływu pracy

Aby ułatwić przechodzenie do hierarchicznych przepływów pracy, składniki przepływu pracy są wyświetlane w widoku konspektu w stylu drzewa. Widok konspektu jest wyświetlany w widoku konspektu dokumentu . Aby otworzyć ten widok, w górnym menu wybierz pozycję Widok, Inne okna, Konspekt dokumentu lub naciśnij klawisze Ctrl W,U. Kliknięcie węzła w widoku konspektu spowoduje przejście do odpowiedniego działania w projektancie przepływu pracy, a widok konspektu zostanie zaktualizowany w celu wyświetlenia działań wybranych w projektancie.

Poniższy zrzut ekranu przedstawiający ukończony przepływ pracy z samouczka Wprowadzenie przedstawia widok konspektu z sekwencyjnym przepływem pracy.

Zrzut ekranu przedstawiający widok konspektu z sekwencyjnym przepływem pracy w programie Visual Studio.

Wyrażenia języka C#

Przed .NET Framework 4.5 wszystkie wyrażenia w przepływach pracy mogą być zapisywane tylko w języku Visual Basic. W .NET Framework 4.5 wyrażenia języka Visual Basic są używane tylko dla projektów utworzonych przy użyciu języka Visual Basic. Projekty języka Visual C# używają teraz języka C# do wyrażeń. W pełni funkcjonalny edytor wyrażeń języka C# zapewnia funkcje, takie jak wyróżnianie gramatyki i funkcja intellisense. Projekty przepływu pracy języka C# utworzone w poprzednich wersjach korzystające z wyrażeń języka Visual Basic będą nadal działać.

Wyrażenia języka C# są weryfikowane w czasie projektowania. Błędy w wyrażeniach języka C# zostaną oznaczone czerwoną falistą podkreśloną.

Aby uzyskać więcej informacji na temat wyrażeń języka C#, zobacz Wyrażenia języka C#.

Większa kontrola widoczności elementów paska powłoki i nagłówka

W projektancie ponownie hostowanych niektóre standardowe kontrolki interfejsu użytkownika mogą nie mieć znaczenia dla danego przepływu pracy i mogą być wyłączone. W .NET Framework 4 to dostosowanie jest obsługiwane tylko przez pasek powłoki u dołu projektanta. W .NET Framework 4.5 widoczność elementów nagłówka powłoki u góry projektanta można dostosować, ustawiając WorkflowShellHeaderItemsVisibility odpowiednią ShellHeaderItemsVisibility wartość.

Automatyczne łączenie i automatyczne wstawianie w przepływach pracy schematu blokowego i maszyny stanu

W .NET Framework 4 połączenia między węzłami w przepływie pracy schematu blokowego musiały zostać dodane ręcznie. W .NET Framework 4.5 węzły schematu blokowego i maszyny stanu mają punkty automatycznego łączenia, które stają się widoczne po przeciągnięciu działania z przybornika na powierzchnię projektanta. Usunięcie działania w jednym z tych punktów powoduje automatyczne dodanie działania wraz z wymaganym połączeniem.

Poniższy zrzut ekranu przedstawia punkty załączników, które stają się widoczne po przeciągnięciu działania z przybornika.

Węzeł startowy schematu blokowego przedstawiający punkty automatycznego łączenia

Działania można również przeciągać na połączenia między węzłami schematu blokowego i stanami, aby automatycznie wstawić węzeł między dwoma innymi węzłami. Poniższy zrzut ekranu przedstawia wyróżniony wiersz połączenia, w którym działania można przeciągać z przybornika i upuszczać.

Automatyczne wstawianie uchwytu do porzucania działań

Adnotacje projektanta

Aby ułatwić opracowywanie większych przepływów pracy, projektant obsługuje teraz dodawanie adnotacji, aby ułatwić śledzenie procesu projektowania. Adnotację można dodać do działań, stanów, węzłów schematu blokowego, zmiennych i argumentów. Poniższy zrzut ekranu przedstawia menu kontekstowe używane do dodawania adnotacji do projektanta.

Zrzut ekranu przedstawiający menu dodawania adnotacji.

Stany debugowania

W .NET Framework 4 elementy nieaktywne nie mogą obsługiwać punktów przerwania debugowania, ponieważ nie były to jednostki wykonywania. Ta wersja udostępnia mechanizm dodawania punktów przerwania do State obiektów. Gdy punkt przerwania jest ustawiony w elemecie State, wykonanie zostanie przerwane, gdy stan zostanie przeniesiony do, zanim zostaną zaplanowane jego działania wejścia lub wyzwalacze.

Definiowanie i używanie obiektów ActivityDelegate w projektancie

Działania w .NET Framework 4 używane ActivityDelegate obiekty do uwidocznienia punktów wykonywania, w których inne części przepływu pracy mogą wchodzić w interakcje z wykonywaniem przepływu pracy, ale użycie tych punktów wykonywania zwykle wymaga odpowiedniej ilości kodu. W tej wersji deweloperzy mogą definiować delegatów działań i korzystać z nich przy użyciu projektanta przepływu pracy. Aby uzyskać więcej informacji, zobacz How to: Define and consume activity delegates in the Workflow Designer (Instrukcje: definiowanie i używanie delegatów działań w Projektancie przepływu pracy).

Walidacja czasu kompilacji

W .NET Framework 4 błędy weryfikacji przepływu pracy nie były liczone jako błędy kompilacji podczas kompilacji projektu przepływu pracy. Oznaczało to, że tworzenie projektu przepływu pracy może zakończyć się powodzeniem nawet wtedy, gdy wystąpiły błędy weryfikacji przepływu pracy. W .NET Framework 4.5 błędy weryfikacji przepływu pracy powodują niepowodzenie kompilacji.

Walidacja tła w czasie projektowania

W .NET Framework 4 przepływy pracy zostały zweryfikowane jako proces pierwszego planu, który może potencjalnie zablokować interfejs użytkownika podczas złożonych lub czasochłonnych procesów weryfikacji. Walidacja przepływu pracy odbywa się teraz w wątku w tle, dzięki czemu interfejs użytkownika nie jest blokowany.

Wyświetlanie stanu znajdującego się w oddzielnej lokalizacji w plikach XAML

W .NET Framework 4 informacje o stanie widoku przepływu pracy są przechowywane w pliku XAML w wielu różnych lokalizacjach. Jest to niewygodne dla deweloperów, którzy chcą bezpośrednio odczytać kod XAML lub napisać kod w celu usunięcia informacji o stanie widoku. W .NET Framework 4.5 informacje o stanie widoku w pliku XAML są serializowane jako oddzielny element w pliku XAML. Deweloperzy mogą łatwo zlokalizować i edytować informacje o stanie widoku działania lub całkowicie usunąć stan widoku.

Rozszerzalność wyrażeń

W .NET Framework 4.5 udostępniamy deweloperom możliwość tworzenia własnego środowiska tworzenia wyrażeń i wyrażeń, które można podłączyć do projektanta przepływu pracy.

Włączanie funkcji przepływu pracy 4.5 w projektancie ponownie hostowanych

Aby zachować zgodność z poprzednimi wersjami, niektóre nowe funkcje zawarte w .NET Framework 4.5 nie są domyślnie włączone w projektancie ponownie hostowanym. Ma to na celu zapewnienie, że istniejące aplikacje korzystające z projektanta ponownego hostowania nie są uszkodzone przez aktualizację do najnowszej wersji. Aby włączyć nowe funkcje w projektancie ponownie hostowanych, ustaw wartość TargetFrameworkName ".NET Framework 4.5" lub ustaw poszczególne elementy członkowskieDesignerConfigurationService, aby włączyć poszczególne funkcje.

Nowe modele programowania przepływu pracy

Oprócz modeli tworzenia schematu blokowego i sekwencyjnego przepływu pracy ta wersja obejmuje przepływy pracy maszyny stanowej i usługi przepływu pracy po raz pierwszy.

Przepływy pracy maszyny stanu

Przepływy pracy maszyny stanowej zostały wprowadzone w ramach .NET Framework 4 w wersji 4.0.1 w usłudze Microsoft .NET Framework 4 Platform Update 1. Ta aktualizacja obejmowała kilka nowych klas i działań, które umożliwiły deweloperom tworzenie przepływów pracy maszyny stanu. Te klasy i działania zostały zaktualizowane dla .NET Framework 4.5. Aktualizacje obejmują:

  1. Możliwość ustawiania punktów przerwania w stanach

  2. Możliwość kopiowania i wklejania przejść w projektancie przepływu pracy

  3. Obsługa projektanta na potrzeby tworzenia przejścia współużytkowanego wyzwalacza

  4. Działania używane do tworzenia przepływów pracy maszyny stanu, w tym: StateMachine, Statei Transition

Poniższy zrzut ekranu przedstawia ukończony przepływ pracy maszyny stanu z Wprowadzenie Krok Samouczek: Tworzenie przepływu pracy maszyny stanu.

Ilustracja przedstawiająca ukończony przepływ pracy maszyny stanu.

Aby uzyskać więcej informacji na temat tworzenia przepływów pracy maszyny stanu, zobacz Przepływy pracy maszyny stanu.

Tworzenie przepływu pracy na pierwszym kontrakcie

Narzędzie do programowania przepływu pracy pierwszego kontraktu pozwala deweloperowi najpierw zaprojektować kontrakt w kodzie, a następnie za pomocą kilku kliknięć w programie Visual Studio automatycznie wygeneruj szablon działania w przyborniku reprezentującym każdą operację. Te działania są następnie używane do tworzenia przepływu pracy, który implementuje operacje zdefiniowane przez kontrakt. Projektant przepływu pracy zweryfikuje usługę przepływu pracy, aby upewnić się, że te operacje są implementowane, a podpis przepływu pracy jest zgodny z podpisem kontraktu. Deweloper może również skojarzyć usługę przepływu pracy z kolekcją wdrożonych kontraktów. Aby uzyskać więcej informacji na temat tworzenia usługi przepływu pracy pierwszego kontraktu, zobacz How to: Create a workflow service that consumes an existing service contract (Jak utworzyć usługę przepływu pracy, która korzysta z istniejącego kontraktu usługi).