W tej chwili robię coś podobnego do this, aby przetestować bibliotekę, która komunikuje się z naszymi kontrolerami API, i jak na razie dobrze, ale wpadłem w pułapkę. We wszystkich naszych innych testach integracyjnych przeprowadzamy test wewnątrz transakcji MSDTC na poziomie izolacji ReadCommitted, aby każdy z nich miał własną prywatną sesję z bazami danych i tym podobne, a na końcu każdego testu transakcje zostały wycofane. ..Ale to nie działa dla testów tych, ponieważ transakcje są dla poszczególnych wątków i wszystkie metody HttpClient/HttpServer są asynchroniczne, więc praca jest wykonywana na innym wątku niż główny dla tego testu, doesn ' t mieć transakcję otoczenia do subskrypcji, i idzie w prawo i zatwierdza.Korzystanie z TransactionScope podczas testowania integracji web apis
Natknąłem się na kilka postów dotyczących otwierania TransactionScope w jednym wątku, a następnie tworzenia zależnej transakcji, która ma zostać przekazana do nowego zadania przez zamknięcie, ale nie mam pojęcia, jak zastosować to do HttpClient to jest połączone z HttpServer w pamięci. I podejrzany Po prostu nie myślę o tym we właściwy sposób, ale to wszystko, co muszę zrobić.
Co miałoby sens/praca/etc? Mam pełną kontrolę nad tworzeniem HttpServera i HttpClient, które się z nim łączą, ale nie mam pojęcia, co z nimi zrobić.
UPDATE:
Pewien postęp został made- Napisałem obsługi wiadomości, które można utworzyć transakcję zależne od wątku roboczego jeśli Transaction.Current jest wypełniana, gdy robi się tam, a dla niektórych z moich rozmów tak jest, ale dla innych nie jest, i zastanawiam się, czy mogę ścigać cienie - jak, jest dużo ContinueWith wokół i myślę, że jest wykonywany na wątku wywołującym (który naturalnie miałby transakcję) jeśli zadanie poprzedzające jest już ukończone.
Czy to możliwe, aby uruchomić synchronicznie wszystko i nosić testowy wątek przez całą drogę? Eksperymentowałem trochę z ContinueWith'ing synchronicznie bez większego sukcesu ..
Cóż, tak właśnie testujemy kontrolery, ale chodzi o przetestowanie interakcji między biblioteką C#, która usuwa komunikację z interfejsem web apis, która wymaga użycia prawdziwego połączenia HTTP. Po stronie wyższej, myślę, że znalazłem odpowiedź - obiekt HttpServer nie wydaje się zakodować wątku wywołań Async, ale mój kod po stronie klienta zrobił, zupełnie niepotrzebnie. Zabrałem te rzeczy i działa dobrze. –