Domanda

Stiamo costruendo un sistema che interagisce con un sistema esterno su TCP / IP utilizzando il Protocollo FIX . Ho usato WCF per comunicare da client a server, dove avevo il controllo sia del client che del server, ma mai a un sistema esterno basato su TCP / IP. Questo è possibile con WCF? In tal caso, la community potrebbe fornire link per iniziare e affrontare la giusta direzione?

Sfortunatamente non ho molte più informazioni di ciò che viene fornito sopra, dato che siamo ancora nelle prime fasi di pianificazione. Quello che sappiamo è che abbiamo un fornitore esterno il cui sistema comunicherà con il nostro sistema su TCP / IP. Vorremmo usarlo come un'opportunità di apprendimento e imparare WCF.

È stato utile?

Soluzione

Non credo sia possibile, almeno non sarà facile configurarlo perché non si conosce il protocollo di comunicazione dell'altra estremità, tranne che per TCP e accettare i tag FIX.

Perché nell'applicazione WCF non si apre una connessione TCP a SOCKET. Questo dovrebbe fare il trucco in un modo più semplice.

Altri suggerimenti

Possibile? Forse sì, ma ci vorrà del lavoro.

Per cominciare, dovrai scrivere un canale di trasporto WCF personalizzato che gestisca le specifiche dei protocolli basati su TCP / IP (ad esempio dovrai scrivere tutto il codice di gestione dei socket e agganciarlo nel modello di canale WCF). Questo perché il canale TCP in WCF non è per questo tipo di lavoro, ma utilizza un protocollo di filo relativamente proprietario e non documentato.

Non ho abbastanza familiarità con FIX per dire quanto sia complesso, ma ci sono alcuni trucchi quando si scrivono canali WCF e la documentazione in quella zona non è eccezionale.

La seconda parte che dovrai affrontare è la codifica dei messaggi. Per WCF, tutti i messaggi sono XML. Cioè, una volta che un messaggio viene passato allo stack WCF, deve apparire come un infoset XML in fase di runtime. FIX non usa XML (afaik), quindi dovrai adattarlo un po '.

Ci sono due modi per aggirarlo:

  1. Il modo più semplice: supponiamo che il server / client utilizzi un'interfaccia e un formato specifici per i dati e che il tuo canale faccia tutto il duro lavoro di traduzione dei messaggi FIX in / da quel formato. L'esempio più semplice sarebbe che il codice WCF utilizzi un semplice contratto di servizio con un metodo che prende una stringa e quindi incapsula la stringa di messaggio FIX nel formato XML che soddisfa il serializzatore del contratto dati per quel contratto. Il codice utente dovrebbe comunque avere a che fare con la decodifica del formato FIX in seguito, tuttavia.

  2. Fai tutto il duro lavoro in un MessageEncoder WCF personalizzato. È un po 'più complesso, ma potenzialmente più pulito e riutilizzabile (e potresti fare cose più complesse come streaming migliore e così via).

La grande domanda però è se ne valga la pena. Qual è il tuo ragionamento per voler usare WCF per questo? Sfruttare il modello di programmazione? Penso che sia una considerazione importante, ma tieni anche presente che le astrazioni fornite da WCF hanno un prezzo. In particolare, alcuni aspetti di WCF possono essere problematici se si hanno requisiti in tempo reale, che a mio avviso è comune nel tipo di ambiente finanziario che si sta esaminando.

In tal caso, potrebbe benissimo essere meglio servirti saltando WCF e restando un po 'più vicino al metallo. Dovrai comunque fare funzionare il socket, quindi è qualcosa da considerare lì.

Spero che questo aiuti :)

Io penso così. Ho un sistema che quasi ha funzionato e che avrebbe dovuto fare quasi esattamente questo (WCF su HTTP da Internet). Il provider del server sembrava non volerlo permettere, quindi avrai bisogno delle autorizzazioni giuste per farlo funzionare.

Colpo alto: non vedo perché no.

In realtà no - Ms non ha fatto in modo che il gestore della connessione TCP / IP parlasse con servizi non WCF, ma ha pensato che avresti scritto un servizio Web per farlo.

Questo è discusso qui su SO .

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