Как осуществлять взаимодействие внутри приложения в .NET

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
3 291
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Межпроцессное взаимодействие в .NET

это не тот же вопрос ... мой вопрос касается взаимодействия двух разных приложений, а не одного и того же приложения, которое запускается несколько раз и требует некоторого центрального объекта состояния

OS. 24.10.2008 07:29

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

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

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

Ответ принят как подходящий

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

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

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

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

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

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

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

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

-Скотт

Другие вопросы по теме