Я сделаю резкий удар и скажу, что вы, вероятно, хотите, чтобы офисное приложение позвонило домой вашему exe? В этом контексте exe - это сервер, а офисное приложение - клиент.
Если вы используете .NET 3.0, WCF, вероятно, будет лучшим выбором. Я бы структурировал решение на три части:
- «Общие контракты». Это интерфейсы, которые описывают ваши услуги. Если у вас есть пользовательские объекты данных, которые будут передаваться между приложениями, они также должны быть определены в этой сборке. Эта сборка является общей для клиента и сервера. Для получения дополнительной информации см. « Разработка контрактов на обслуживание ».
- "Сервис". Эта сборка является вашим «exe» и будет ссылаться на контракты и определять классы на основе ваших сервисных контрактов. Ваше приложение также будет содержать ServiceClient для вашего сервиса. Файл конфигурации для этого приложения будет определять, как ваш ServiceClient будет представлен клиенту (доступен как веб-сервис, tcp и т. Д.). Для получения дополнительной информации см. « Реализация контрактов на обслуживание ».
- "Клиент". Ваш плагин будет ссылаться на сборку «Общие контракты» и будет содержать сервис-клиентов на основе контрактов. Клиент может быть сгенерирован автоматически с помощью инструмента svcutil.exe.
И для "exe", и для "плагина" потребуются файлы конфигурации, которые определяют привязки.
Когда вы хотите передать данные между клиентом и сервером, ваш клиент создаст объект из сборки «Общие контракты» и передаст его сервис-клиенту. Файл конфигурации клиента определит, куда отправлять данные.
Для пошагового руководства по созданию базовой службы WCF ознакомьтесь с этим руководством .