Jakiej metody IPC należy użyć między rozszerzeniem Firefox a kodem C # działającym na tym samym komputerze?

Mam pytanie dotyczące struktury komunikacji między (nowym) rozszerzeniem Firefox a istniejącym kodem C #.

Rozszerzenie firefox użyje danych konfiguracyjnych i wygeneruje inne dane, więc musi skądś pobrać dane konfiguracyjne i zapisać je gdzieś. Dane są produkowane / wykorzystywane przez istniejący kod C #, więc muszę zdecydować, jak rozszerzenie powinno współdziałać z kodem C #.

Niektóre istotne czynniki:

Działa tylko w systemie Windows, w stosunkowo kontrolowanym środowisku korporacyjnym.Mam uruchomioną usługę Windows na komputerze, zbudowaną w C #.Przechowywanie danych w lokalnym magazynie danych (np. Sqlite) byłoby przydatne z innych powodów.Ilość danych jest niska, np. 10kb nieskompresowanego xml co kilka minut i nie jest zbyt „gadatliwy”.Wymiana danych może być w większości asynchroniczna, jeśli nie całkowicie.Tak jak w przypadku wszystkich projektów, mam ograniczone zasoby, więc chcę opcji, która jest stosunkowo łatwa.Nie musi to być bardzo wysoka wydajność, ale nie powinna dodawać znaczących nakładów.Mam zamiar zbudować rozszerzenie w javascript (choć można to przekonać, jeśli jest to konieczne)

Niektóre opcje rozważam:

użyj mostu XPCOM do .NET / COMużyj bazy danych sqlite: rozszerzenie będzie czytać i zapisywać do niego. Kod c # byłby uruchamiany w usłudze, zapełniając db, a następnie przetwarzając dane utworzone przez usługę.użyj gniazd TCP do komunikacji między rozszerzeniem a usługą. Pozwól usłudze zarządzać lokalnym magazynem danych.

Moim problemem z (1) jest myślenie, że będzie to trudne i nie takie łatwe. Ale mogłem się całkowicie mylić? Głównym problemem, jaki widzę w (2), jest blokowanie sqlite: tylko jeden proces może zapisywać dane naraz, więc będzie pewne blokowanie. Jednak ogólnie rzecz biorąc byłoby miło mieć lokalny magazyn danych, więc jest to atrakcyjna opcja, jeśli wpływ na wydajność nie jest zbyt duży. Nie wiem, czy (3) byłoby szczególnie łatwe lub trudne ... lub jakie podejście przyjąć protokół: coś niestandardowego lub http.

Wszelkie komentarze na temat tych pomysłów lub innych sugestii?

AKTUALIZACJA: Planowałem zbudować rozszerzenie w javascript, a nie c ++

questionAnswers(4)

yourAnswerToTheQuestion