¿Qué método de IPC debo usar entre la extensión de Firefox y el código C # que se ejecuta en la misma máquina?

Tengo una pregunta sobre cómo estructurar la comunicación entre una (nueva) extensión de Firefox y el código C # existente.

La extensión de Firefox utilizará los datos de configuración y producirá otros datos, por lo que debe obtener los datos de configuración de algún lugar y guardar su salida en algún lugar. Los datos son producidos / consumidos por el código C # existente, por lo que debo decidir cómo la extensión debe interactuar con el código C #.

Algunos factores pertinentes:

Solo se ejecuta en Windows, en un entorno corporativo relativamente controlado.Tengo un servicio de Windows ejecutándose en la máquina, integrado en C #.Almacenar los datos en un almacén de datos local (como sqlite) sería útil por otras razones.El volumen de datos es bajo, por ej. 10kb de xml sin comprimir cada pocos minutos, y no es muy "hablador".El intercambio de datos puede ser asíncrono en su mayor parte, si no completamente.Al igual que con todos los proyectos, tengo recursos limitados, así que quiero una opción que sea relativamente fácil.No tiene que ser un rendimiento ultra alto, pero no debe agregar una sobrecarga significativa.Estoy planeando construir la extensión en javascript (aunque podría ser convencido de lo contrario si fuera necesario)

Algunas opciones que estoy considerando:

utilizar un puente de XPCOM a .NET / COMuse un db sqlite: la extensión leerá y guardará en él. El código c # se ejecutaría en el servicio, llenando la base de datos y luego procesando los datos creados por el servicio.use sockets TCP para comunicarse entre la extensión y el servicio. Deje que el servicio administre un almacén de datos local.

Mi problema con (1) es que creo que esto será complicado y no tan fácil. ¿Pero podría estar completamente equivocado? El principal problema que veo con (2) es el bloqueo de sqlite: solo un proceso puede escribir datos a la vez, por lo que habría algún bloqueo. Sin embargo, generalmente sería bueno tener un almacén de datos local, por lo que esta es una opción atractiva si el impacto en el rendimiento no es demasiado grande. No sé si (3) sería particularmente fácil o difícil ... o qué enfoque tomar sobre el protocolo: algo personalizado o http.

¿Algún comentario sobre estas ideas u otras sugerencias?

ACTUALIZACIÓN: Estaba planeando construir la extensión en javascript en lugar de c ++

Respuestas a la pregunta(4)

Su respuesta a la pregunta