Aplikacja działa kompletnie inaczej na innych maszynach

0

Witam.
Wiem, że tytuł może wydawać się dziwny. To wszystko zaczęło się od tego wątku.

OPIS
Pobieranie rezerwacji hotelowej i zapisanie jej jako dokument do Enova365. W rezerwacjach jest lista pokoi. Każdy pokój ma "tag" z nazwą firmy, do której dana rezerwacja ma wpaść. Dla przykładu

rooms: [
{
  id: 12456,
  from: "2022-11-08",
  to: "2022-11-22"
  tags: [
    "studio",
    "lux",
    "firma1"
  ]
},
{
  id: 124567,
  from: "2022-11-08",
  to: "2022-11-22"
  tags: [
    "lux",
    "firma2"
  ]
},
]

Ta jedna rezerwacja zostanie rozbita na dwa dokumentu - jeden wpadnie do firma1 z jednym pokojem, drugi wpadnie do firma2 z drugim pokojem.

rooms: [
{
  id: 12456,
  from: "2022-11-08",
  to: "2022-11-22"
  tags: [
    "studio",
    "lux",
    "firma1"
  ]
},
{
  id: 1245,
  from: "2022-11-08",
  to: "2022-11-22"
  tags: [
    "lux",
    "firma1"
  ]
},
]

Najczęściej występują takie co są w obrębie jednej firmy.

ZAŁOŻENIA - w tym przykładzie, który "nie działa" zakładamy, że operujemy w obrębie jednej rezerwacji, która ma wszystkie pokoje do jednej i tej samej firmy.

1. DZIAŁANIE ZAMIERZONE
Pobieram listę rezerwacji w zakresie dat. Wybieram jedną rezerwację (kolumna select z DevExpress). Klikam guzik Zapisz zaznaczone. DevExpressowy loading screen pokazuje tekst z postępem zapisywania rezerwacji. W postępie jest informacja, do której firmy się logujemy, aby zapisać dokument. W naszym przypadku pokazuje Logowanie do firmy firma1.

2. DZIAŁANIE NIEZAMIERZONE
Dla tej samej rezerwacji aplikacja próbuje się logować do każdej z możliwych firm, a nie powinna. Dzieje się tak tylko poza moją maszyną, na której to wszystko zaprogramowałem.

PROCEDURA

  1. Robię release całej solucji

  2. Kopiuje release na inny komputer

  3. Aplikacja wykonuje się jak w punkcie 2.

  4. Uruchamiam z folderu release na moim komputerze

  5. Aplikacja działa tak jak powinna. Punkt 1.

Ciężko to opisać. Ciężko to pokazać. Ale program poza moją maszyna działa kompletnie inaczej niż u mnie. I nie mówię tutaj o debugu, bo nawet skopiowałem całą paczkę w inne miejsce na moim komputerze i też działa poprawnie.

TECHNOLOGIA
.NET 6 - Worker Service, Class Library, WinForms + DevExpress

0

Pierwsze, pobieżne spostzreżenie, to nie jest typowy dla JSON-a format daty - a to może otwierać dla biblioteki dodatkowe zgadywanki o co chodzi

próbuje się logować do każdej z możliwych firm

O czym mówisz, bo nie ukrywam zdziwko wielkie.

jeśli tak jest naprawde, to problem jest poza podanymi fragmentami

3

W takich sytuacjach mi się najbardziej sprawdzał remote debugging:

https://learn.microsoft.com/en-us/visualstudio/debugger/remote-debugging-csharp?view=vs-2022

Z mojego doświadczenia przyczyn może być bardzo wiele i człowiek się zastanawia i kombinuję, a podczas debugowania okazuję się że to coś zupełnie innego i klepie się w czoło że to takie proste było :)

0

@ZrobieDobrze:
To jest tylko przykład jak wygląda struktura danych i skąd są brane "tagi". To nie ma nic wspólnego z błędem. Nie mam żadnych wyjątków, żadnych błędów, nic.

próbuje się logować do każdej z możliwych firm

Dane są grupowane po ostatnim tagu GroupBy(x => x.Tags.Last()). Jeśli mamy tylko jedną rezerwację, która ma wszystkie pokoje do jednej firmy (firma1), to dlaczego aplikacja próbuje się logować do firma2? Ta sama release paczka u mnie na kompie loguje się tylko do firma1, a na 3 innych komputerach (bez środowiska programistycznego) loguje się do każdej możliwej. Tak jakby to była "inna" aplikacja.

@Wilktar:
Dzięki za sugestię. Na pewno to sprawdzę.

0

weź pokaż jakiś kod bo szklana kula mi się rozładowała

+ co tam z logów wywnioskowałeś, masz je w ogóle?

1

Nie mam jak kodu pokazać, bo to nie jest takie proste. Żeby to miało sens musiałbym tutaj pół projektu wrzucić. Co ci da jakiś mały skrawek nie znając całego kontekstu. Po krótce mówiąc, żeby coś jednak wrzucić

var rooms = await _hotelReader.GetRooms(); // pobieram listę pokoi. Tam są tagi
var reservationsDataSource = gcReservations.DataSource as List<ReservationDto>; // pobieram rezerwacje z GridControl
var groupedRooms = rooms.Data.Where(x => x.Tags.Length > 0).GroupBy(x => x.Tags.Last()); // grupuje pokoje po ostatnim tagu, który jest nazwą firmy

foreach(var groupedRoom in groupedRooms) 
{
  // ... co dalej jest nie ma znaczenia. Znaczenie ma, że mój przykład powinien skończyć się na jednej firmie, bo groupedRooms powinno zwrócić tylko 'firma1'
}

To jest ten sam kod. Na tych wszystkich maszynach, a działa "poprawnie" tylko na mojej. I to nie z poziomu Visuala, a z osobnego folderu po zrobieniu release.

1

Problem rozwiązany dzięki remote debugger. W kodzie mam też ifa, który sprawdza czy baza z tagów istnieje na liście baz systemu ERP. Okazało się, że u mnie są firmy drukowanymi literami, dlatego wszystko działało. W kodzie miałem ToUpper() tylko do tagów, a powinno być z dwóch stron, bo klient ma nazwy Firma1, a jak wiemy FIRMA1 != Firma1 i pętla leciała dalej pomijając logowanie się i dodawanie dokumentu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1