J’ai un serveur WCF écrit en C # et utilise netTCPBinding pour communiquer avec les clients. Maintenant, je veux que mon client c ++ non géré se connecte au même serveur WCF. Est-ce possible? Les clients C ++ peuvent-ils avoir les mêmes fonctionnalités que les clients C #? Si c’est possible, comment puis-je le faire? J’ai lu quelque chose sur la création d’une dll de pont entre c ++ Client et C # Server, mais le didacticiel est assez ancien et tous les modèles sont manquants dans Visual Studio 2013 Express.
Jetez un coup d’œil à l’API Windows WEB Services:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd430435%28v=vs.85%29.aspx – page principale
http://msdn.microsoft.com/en-us/library/windows/desktop/ee354195%28v=vs.85%29.aspx – exemples de code
Cet article explique comment établir une connexion entre le code C ++ natif et C # WCF:
http://www.codeproject.com/Articles/38535/A-first-look-at-the-Windows-Web-Services-API
Notez que l’interopérabilité entre WCF géré et client natif est limitée. WCF géré expose certaines fonctionnalités, telles que le regroupement des exceptions, les interfaces de rappel, la sérialisation des objects gérés, qui ne sont pas sockets en charge par l’API WWS native. Vous devez utiliser un simple protocole de communication binary et effectuer la sérialisation binary (si nécessaire) manuellement des deux côtés. Les appels WCF à une manière (asynchrones) peuvent être implémentés en tant que méthodes void
dans l’API WWS. Au lieu de l’interface de rappel, utilisez la paire serveur / client des deux côtés. Je vous recommande d’utiliser un modèle de service WWS simple et de haut niveau plutôt que la couche de canaux, ce qui est assez compliqué.
D’après mon expérience personnelle: après avoir testé l’interopérabilité WWS-WCF, j’ai décidé d’implémenter le niveau de communication uniquement dans le SDK WWS et d’exposer cette fonctionnalité pour le code C # via PInvoke. J’utiliserais l’interopérabilité WWS-WCF uniquement si j’ai besoin de communiquer avec le service WCF existant que je ne peux pas modifier.
Une autre façon: ajoutez le support .NET au projet C ++ natif. Maintenant, vous pouvez utiliser WCF de manière conventionnelle .NET. Par exemple, vous pouvez append une référence à la bibliothèque de classes C # qui fonctionne avec WCF et l’appeler à partir de code C ++.