2010-04-03 4 views
5

Tooday J'utilise ServiceHost pour héberger soi-même WCF cervices.Comment héberger le service WCF et le serveur TCP sur la même socket?

Je veux accueillir près de mes services WCF mon programm TCP pour les opérations de prises directes (comme privilège à une sorte de flux TCP de diffusion)

J'ai besoin de contrôle sur les espaces de noms d'URL (et je voudrais donc pouvoir laisser mes clients à envoyer des flux TCP directement dans mon service en utilisant quelques bonnes URL comme example.com:port/myserver/stream?id=1 ou example.com:port/myserver/stream?id=anything et ainsi je ne serai pas dérangé Avec Idea de 1 client pour 1 socket à un moment donné, je veux vraiment garder mes services WCF sur le même port que mon propre serveur ou ce qu'il est ainsi pour pouvoir appeler www.example.com:port/myWCF/stream ? id = 222 ... et je veux qu'il fonctionne sur n'importe quel port - pas seulement 80)

Est-ce que n'importe quel corps peut m'aider avec ceci? J'utilise juste WCF maintenant. Et je n'aime pas comment ça marche. C'est l'une des nombreuses raisons pour lesquelles je veux commencer la migration pour effacer TCP =)

Je ne peux pas utiliser la liaison net-tcp ou tout autre type de liaison WS- * cool (aujourd`hui j'utilise le plus simple pour que mes clients comme Flash, AJAX, etc se connecter à moi avec facilité).

J'avais besoin d'un protocole de connexion simple et rapide comme celui que j'ai créé avec Sockets pour le transfert de données en temps réel.

Alors .. Des idées? S'il te plait - j'ai besoin d'aide.

+0

Vous pouvez écrire un transport personnalisé dans WCF. Voir cette question SO - http://stackoverflow.com/questions/381142/how-to-write-a-socket-based-custom-transport-for-wcf –

+2

Je ne vois pas quel est le problème avec juste utiliser WCF . Que ne peut-il faire que vous en avez besoin? – Aaronaught

+0

WCF est trop lent et bugggy pour le transfert de données haute résolution en temps réel infini sur les sockets TCP. – Rella

Répondre

0

Si votre problème avec WCF est la performance, vous devriez essayer la liaison TCP binaire net pour éliminer la sérialisation XML pour améliorer les performances.

Certaines applications à fort trafic, comme les jeux en temps réel, utilisent le protocole UDP pour la majorité des communications, car elles coupent le protocole. Avec TCP, la commande et la fiabilité sont intégrées, mais cela se fait au détriment des performances, car il retarde implicitement les paquets pour attendre les paquets hors service afin qu'ils puissent les remettre à l'application dans le bon ordre ou attendre les paquets perdus. être renvoyé. Au lieu de cela, vous pouvez utiliser UDP et implémenter votre propre schéma pour la vérification des données moins strictes que TCP.

Il existe des options UDP disponibles pour WCF, ou vous pouvez implémenter les vôtres. WCF n'est rien de plus qu'une pompe de message, et vous pouvez remplacer différentes étapes avec ce que vous voulez.

+0

Je ne peux pas utiliser la liaison net-tcp car il est assez difficile de se connecter à partir de Flash et d'autres choses. J'ai désespérément besoin de Fast et plus facile dans la mise en œuvre du protocole de connexion comme celui que j'ai créé avec Sockets pour le temps réel et le transfert de données. Mon seul problème avec les connexions sockets est - je ne peux pas les faire fonctionner en bonne paire avec WCF (sur la même socket, de sorte que mon serveur TCP serait disponible comme j'appelle mes services WCF - par simple adresse encore lisible) – Rella

+0

Et je peux N'utilisez pas UDP du tout parce que mon patron est triste et nous devons vraiment être sûr que toutes les données sont arrivées au client – Rella

+0

Mais quelle différence fait UDP pour être sûr que les données proviennent du client? Oui, vous pouvez supposer avec une assez bonne certitude que l'adresse IP est correcte. Mais si c'est un site public, vous ne savez pas vraiment quel client est en train de faire l'appel. –

-1

Vous ne savez pas si cela vous aidera ou non, mais essayez d'activer votre service de partage TCP Net.

1

Eh bien, si vous allez tomber dans des sockets pures, vous pourriez aussi faire de votre service un proxy. Faites en sorte que les services WCF écoutent sur un autre port et votre application sur le port souhaité. Lorsque vous recevez une demande dans votre application, analysez manuellement l'en-tête et vérifiez la météo pour votre service ou service WCF. S'il est destiné au service WCF, ouvrez une connexion TCP au service WCF et transmettez-lui les données reçues, puis renvoyez simplement la réponse de WCF au client.

D'un autre côté, vous pourriez accélérer considérablement le WCF en écrivant votre propre liaison personnalisée. Beaucoup de temps que la WCF perd sur la sérialisation qui est faite en utilisant la réflexion (qui est lente), contourner cela augmenterait considérablement votre vitesse.

Questions connexes