Привет, кто пробовал? Какие подводные камни? В основном интересуют проблемы с сериализацией плюсовых типов в дотнетовские. Призываю @GRRRL Power, помнится ты что то говорил об этом.
При чем здесь асп.нет? На шарп переписывать нельзя из за соображений производительности, а на С++ писать гуй это просто ад. Вот и хочется разделить: сервис на С++, гуй на С#.
А расскажи что у тебя за соображения производительности такие? Скорость языка почти никогда не является проблемой в веб-приложениях. Особенно если использовать кэширование и факторизовать computational-intensive логику. Ты можешь сделать бэкенд на удобном языке, определить места, где нужно больше производительности и их переписать на "быстром" языке. Про сериализацию: JSON, protobuf, messagepack — работают со многими языками.
У меня не веб сервиса а windows service, по производительности скажем так - очень активная работа с файловой системой, перебор и обработка больших объемов файлов. К протобафу нужно еще RPC либу которая умеет его юзать и для С++ и для С#, нужно гуглонуть.
Я сам работал вот с такими вариантами: 1. Сделать либу с plain C интерфейсом и просто вызывать ее функции из C#-кода. 2. Сделать либу на C++ с плюсовым интерфейсом, потом написать для C++ классов C++/CLI-обертки и использовать их из C#. Как преобразовывать типы, решаешь в таком случае сам. Из минусов - прилично кода, ничего не генерится автоматически. Есть еще вариант, когда есть отдельное приложение на C++ и отдельное на C#. Это как раз случай с C++ - windows service и GUI на C#. Можно по-разному организовать их общение. Например, RPC и какой-нибудь сериализатор. Я не в курсе, есть ли какие-то открытые библиотеки, позволяющие организовать такое взаимодействие (не искал, но думаю, что что-то можно нарыть). В одной из компаний используется для разработки ПО именно такая архитектура, но существует самописные библиотеки сериализации/десериализации и автоматические генераторы врапперов, позволяющие обернуть C++-интерфейсы для использования их в C# через RPC. Из плюсов - есть набор типов, которые доступны для сериализации в автоматическом режиме, можно сериализовывать структуры из этих типов. Можно удаленно получать интерфейсы и вызывать их методы. Минусы - дофига кода, который отвечает за процесс генерации всего этого добра, а также кода, который позволяет безопасно гонять всё это через RPC. Все плюсовые типы не получится преобразовать в C#-типы, равно как и наоборот, придется ограничиться фиксированным набором (строки, массивы, числа и т.д.) PS. На Qt + QML можно сделать сейчас малыми усилиями неплохой кроссплатформенны интерфейс, хотя WPF всё равно богаче, конечно.
C# лучше с C# так как метаданные не надо будет потом парсить. Можно прямо структурами передавать. Получается в разы быстрее. Я пробовал писать десктоп игру - 3-их выдерживает без проблем в реалтайм. ИМХО C# лучше.