2010-04-03 12 views
5

Tooday Uso ServiceHost per i cervici WCF autoportanti.Come ospitare il servizio WCF e il server TCP sullo stesso socket?

voglio ospitare vicino ai miei servizi WCF il mio programma TCP per le operazioni di prese dirette (come pegno a una sorta di flusso di trasmissione TCP)

ho bisogno di controllo su spazi dei nomi URL (quindi vorrei essere in grado di lasciare i miei clienti inviano flussi TCP direttamente al mio servizio utilizzando alcuni URL graditi come example.com:port/myserver/stream?id=1 o example.com:port/myserver/stream?id=anything e in modo che non sia disturbato con Idea di 1 client per 1 socket in una sola volta, desidero davvero mantenere i miei servizi WCF sulla stessa porta del mio server o cosa sia per poter chiamare www.example.com:port/myWCF/stream ? id = 222 ... e voglio che funzioni su Qualsiasi porta - non solo 80)

Qualunque corpo può aiutarmi con questo?

Sono utilizzando solo WCF ora. E non mi piace come funziona. Questo è uno dei tanti motivi per cui voglio avviare la migrazione per cancellare TCP =)

Non riesco a utilizzare il binding net-tcp o qualsiasi altro tipo di binding WS- * (ad oggi uso il più semplice in modo che i miei clienti come Flash, AJAX, ecc. connettiti con me con facilità).

Avevo bisogno di un protocollo di connessione rapido e facile come quello che ho creato con gli zoccoli per il trasferimento di dati in tempo reale.

Quindi .. Tutte le idee? Per favore, ho bisogno di aiuto.

+0

È possibile scrivere un trasporto personalizzato in WCF. Vedi questa domanda SO - http://stackoverflow.com/questions/381142/how-to-write-a-socket-based-custom-transport-for-wcf –

+2

Non vedo il problema con l'utilizzo di WCF . Cosa non può fare che ne hai bisogno? – Aaronaught

+0

WCF È troppo lento e bugggy per il trasferimento infinito di dati ad alta risoluzione in tempo reale su socket TCP. – Rella

risposta

0

Se il problema con WCF è rappresentato dalle prestazioni, è necessario provare il binding TCP net binario per eliminare la serializzazione XML per migliorare le prestazioni.

Alcune applicazioni ad alto traffico, come i giochi in tempo reale, utilizzano UDP per la maggior parte delle comunicazioni poiché taglia il protocollo. Con TCP si ottiene l'ordine e l'affidabilità incorporati, ma questo ha un costo in termini di prestazioni perché ritarderà implicitamente i pacchetti per attendere pacchetti non in ordine, in modo che possano consegnarli all'applicazione nell'ordine corretto o attendere i pacchetti persi essere risentito. Invece è possibile utilizzare UDP e implementare il proprio schema per la verifica dei dati meno rigorosi rispetto a TCP.

ci sono opzioni disponibili per UDP WCF, o è possibile implementare il proprio. WCF non è altro che una pompa di messaggi, e puoi sostituire diversi passaggi con quello che vuoi.

+0

Non riesco a utilizzare il binding net-tcp perché è piuttosto difficile connettersi a se da Flash e altre cose. Ho disperatamente bisogno di un protocollo di connessione rapido e facile come quello che ho creato con Socket per il trasferimento dei dati in tempo reale. Il mio unico problema con le connessioni socket è - Non riesco a farle funzionare in coppia con WCF (sullo stesso socket, in modo che il mio server TCP sia disponibile proprio come chiamo i miei servizi WCF - tramite indirizzo semplice ma leggibile) – Rella

+0

E posso NON UTILIZZARE UDP affatto perché il mio capo è triste e dobbiamo davvero essere sicuri che tutti i dati arrivino al cliente – Rella

+0

Ma che differenza fa l'UDP per essere sicuri che i dati provengano dal Cliente? Sì, si potrebbe asume con certezza piuttosto buono che l'indirizzo IP è corretto. Ma se si tratta di un sito pubblico non si saprebbe davvero quale client sta effettuando la chiamata. –

-1

Non sono sicuro se questo vi aiuterà o no, ma cercare di accendere il TCP servizio di condivisione netto.

1

Beh, se hai intenzione di passare alle prese pure, puoi anche fare in modo che il tuo servizio funga da proxy. Rendi i servizi WCF in ascolto su qualche altra porta e la tua app sulla porta desiderata. Quando ricevi una richiesta nella tua app, analizza manualmente l'intestazione e controlla il tempo previsto per il tuo servizio o il servizio WCF. Se è destinato per il servizio WCF, aprire una connessione TCP al servizio WCF e passare i dati ricevuti ad esso, e poi semplicemente passare di nuovo la risposta di WCF per il cliente ..

D'altra parte si potrebbe accelerare WCF un bel po ' scrivendo il tuo binding personalizzato. Un sacco di tempo in cui WCF perde la serializzazione che viene eseguita utilizzando il reflection (che è lento), aggirarlo migliorerebbe notevolmente la velocità.

Problemi correlati