Как сделать внутрисайтовое общение в .NET - PullRequest
3 голосов
/ 24 октября 2008

Каков наилучший способ передачи данных из одного приложения Windows Forms (офисный плагин) в другое (например, написанный на C #) в C #?

Ответы [ 6 ]

7 голосов
/ 24 октября 2008

Я сделаю резкий удар и скажу, что вы, вероятно, хотите, чтобы офисное приложение позвонило домой вашему exe? В этом контексте exe - это сервер, а офисное приложение - клиент.

Если вы используете .NET 3.0, WCF, вероятно, будет лучшим выбором. Я бы структурировал решение на три части:

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

И для "exe", и для "плагина" потребуются файлы конфигурации, которые определяют привязки.

Когда вы хотите передать данные между клиентом и сервером, ваш клиент создаст объект из сборки «Общие контракты» и передаст его сервис-клиенту. Файл конфигурации клиента определит, куда отправлять данные.

Для пошагового руководства по созданию базовой службы WCF ознакомьтесь с этим руководством .

2 голосов
/ 24 октября 2008

Да. WCF - это путь. Я рекомендую проверить iDesign.net использовать класс InProcFactory. Вы можете превратить свой офисный класс в сервис и вызвать другое приложение, в котором размещается сервис. Другая служба может затем перезвонить в офисную службу.

Вы можете использовать конечную точку IPC, которая сделает связь быстрой.

-Скотт

2 голосов
/ 24 октября 2008
1 голос
/ 24 октября 2008
1 голос
/ 24 октября 2008

Есть множество способов достичь этого. Я использовал именованные каналы в прошлом. Поддержка именованных каналов также теперь встроена в .NET (согласно 3.0?), Так что это довольно просто.

1 голос
/ 24 октября 2008

WCF - один из самых простых способов сделать это. Вы можете зарегистрировать конечную точку службы в каждом приложении, или, если одна является службой, а другая является клиентом, вы можете просто использовать один узел службы.

Ознакомьтесь с руководством по началу работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...