Come posso condividere le classi di messaggi tra le applicazioni quando si utilizza NServiceBus?

StackOverflow https://stackoverflow.com/questions/927490

Domanda

Così ho due applicazioni distinte che voglio inviare messaggi tra. Mi capita di essere utilizzando NServiceBus, ma che non dovrebbe importa. Come faccio a inviare un messaggio dall'applicazione A all'applicazione B e li hanno entrambi essere a conoscenza del contratto stesso?

Un app ha una classe SecretMessage ...

public class SecretMessage : IMessage
{
     public string Title { get; set; }
     public string Body { get; set; }
}

Questo è l'oggetto che verrà serializzato e inviati in rete di applicazione B.

Ora in App B, come faccio ad ascoltare i messaggi che sono di quel tipo e quindi essere in grado di de-serialze alla stessa classe? Così posso utilizzare i dati come è stato inviato, senza che ciò sia un incubo di manutenzione.

L'app B solo avere una copia della classe? Se questo dovesse essere gestita attraverso una DLL condivisa di classi di messaggi che ogni applicazione ha un riferimento a (spero di no)? Dovrebbero essere ricreati in ogni app come completamente separata DTO con le stesse proprietà?

Mi sto perdendo qualcosa qui?

È stato utile?

Soluzione

Esso non può essere la risposta che desidera, ma ci sono molto poche pallottole d'argento qui.

Hai davvero solo poche scelte, e come tale quindi dipende dal livello di funzionalità e tipo-indurimento che volete nella vostra classi di messaggio:

  1. di Shared DLL - beneficio che può essere il codice + Struttura per esempio costruttori utili, enumeratori complessi, debug implementazioni ToString ecc forte controllo delle versioni. Richiede progetto separato e distribuzione per DLL.
  2. Shared schema e generazione di codice. Dichiarare lo schema per i tipi e utilizzare la generazione di codice per creare le classi. Un sacco di diverse strategie qui - alcuni esempi: T4 Templating , , Strumenti "http://msdn.microsoft.com/en-us/library/aa302301.aspx" nofollow "noreferrer" Custom Code Generation e le biblioteche come CodeSmith o Proto .Bufs . Cerca ti troverà molto di più. Può essere abbastanza potente - conoscere molti codeshops che partono tutti i progetti attraverso la prototipazione rapida con CodeGen da DB fino alla UI. Farebbe ancora necessario distribuire schema.
  3. serializzazione di un messaggio con sufficiente fedeltà per generare tipi tramite il codice DOM. Ogni messaggio comporta dei costi di realizzazione metadati di tipo abbastanza per essere rappresentativo di tutti i suoi casi di messaggi. per esempio. rappresentazioni di campi annullabili. Ci sarebbe anche un primo tempo "scoperta" costo intrinseco per generare i tipi di messaggio wrapper.
  4. serializzare dati in una struttura debole come coppie nome / valore, quindi generare classi wrapper simil dizionario. tipizzazione Debole -. facile estendere tho'

Quelli sono davvero le uniche scelte. IMHO # 2 poi 1 # in questo ordine sono in genere i modelli più utili.

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top