Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/98: Рейтинг темы: голосов - 98, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 6

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

28.06.2010, 22:41. Показов 20035. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго дня!

Подскажите, что и как лучше использовать для передачи данных между двумя .NET приложениями.

Мне необходимо с разной временной периодичностью (минуты) обмениваться небольшими объемами данных (десятки килобайт) между двумя приложениями. Идеально была бы возможность подписываться на события другого приложения, и обращаться к объектам в другом приложении.

Начал разбираться с COM, но не покидает ощущение что есть способы проще.

Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.06.2010, 22:41
Ответы с готовыми решениями:

Взаимодействие между двумя приложениями
Я читал возможные варианты и из того, что нашел, если верно понял не подходит ничего (отрицать не буду, еще не отоспался после сданного...

Общение между двумя приложениями
В процессе разработки приложения wpf я окончательно убедился что моя программа не совместима с wpf всего по одной причине , не достаточно...

Как создать сообщение между двумя устройствами via .NET?
Столкнулся с необычной задачей: нужно написать приложение, которое будет отправлять сбщ на другое устройство, желательно через один из...

14
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
29.06.2010, 00:24
вот как-то так...
0
0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 6
29.06.2010, 10:52  [ТС]
Интересно, но TCP мне использовать нежелательно (забыл сказать), даже в формате localhost, поскольку конечные приложения будут стоять на сервере где я не контролирую файервол.
0
Администратор
 Аватар для mik-a-el
87286 / 52863 / 246
Регистрация: 10.04.2006
Сообщений: 13,632
29.06.2010, 11:07
Lolcht0, ремотинг - устаревшая технология.
the_login, используйте WCF.
Цитата Сообщение от the_login Посмотреть сообщение
поскольку конечные приложения будут стоять на сервере где я не контролирую файервол.
Открывать определенные порты все равно придется.
2
0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 6
29.06.2010, 11:19  [ТС]
mik-a-el, да, вот уже начал читать msdn.

Если есть под рукой какае-то более правильные ссылки, буду благодарен за наводку
0
Администратор
 Аватар для mik-a-el
87286 / 52863 / 246
Регистрация: 10.04.2006
Сообщений: 13,632
29.06.2010, 13:05
the_login, кроме мсдн можно еще книги поискать
0
3 / 3 / 0
Регистрация: 30.06.2010
Сообщений: 21
30.06.2010, 01:53
Использовать "глобальную" программу-менеджер, через которую и будут пакеты бегать
0
Администратор
 Аватар для mik-a-el
87286 / 52863 / 246
Регистрация: 10.04.2006
Сообщений: 13,632
30.06.2010, 09:05
Цитата Сообщение от Profyev Посмотреть сообщение
Использовать "глобальную" программу-менеджер, через которую и будут пакеты бегать
Это называется wcf-сервисом...
0
3 / 3 / 0
Регистрация: 30.06.2010
Сообщений: 21
30.06.2010, 20:14
согласен
0
15 / 15 / 1
Регистрация: 01.07.2010
Сообщений: 33
02.07.2010, 00:03
Вообще-то есть десятки способов, например просто через файл передавать данные. Можно через memory mapped file. Можно использовать mail slots. Но пожалуй наиболее стандартный способ - named pipes. Кстати wcf поддерживает named pipes, так что проще всего будет сделать именно так.
1
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
02.07.2010, 00:23
jupy, не надо так жестко в таком простом случае
не надо пайпов, и тем более неуправляемых куч
самый простой способ - сокеты... уже сам нарывался на эти траблы, помогло
0
15 / 15 / 1
Регистрация: 01.07.2010
Сообщений: 33
02.07.2010, 13:11
Цитата Сообщение от Mikant Посмотреть сообщение
jupy, не надо так жестко в таком простом случае
не надо пайпов, и тем более неуправляемых куч
самый простой способ - сокеты... уже сам нарывался на эти траблы, помогло
Чего же здесь жесткого? Самый простой способ (и пожалуй стандартный метод обмена данными между процессами на одной машине) - это как раз пайпы. Тогда не будет никаких траблов с файрволлами. Кроме того пайпы работают быстрее, а интерфейс пайпов - это просто стандартные потоки (Stream).

Если же делать на WCF, то транспорт вас вообще не будет интересовать, т.к. в этом случае вы пишите один код, а далее настройками в файле конфигурации определяете какой транспорт использовать: named pipes, tcp, msmq, http или еще какой. Можно будет даже через интернет обмениваться данными.

Про неуправляемые кучи я ничего не говорил.
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
02.07.2010, 23:40
признаЮ, был неправ. слишком давно их трогал
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using System;
using System.IO.Pipes;
using System.Net;
using System.Net.Sockets;
using System.Threading;
 
namespace SocketVsPipe {
    class Program {
 
        public const int BufferLength = 100000000;
 
        static void Main(string[] args) {
 
            Transmitter transmitter = null;
            Receiver receiver = null;
 
            new Action(() => {
                transmitter = new Transmitter();
            }).BeginInvoke(null, null);
 
            new Action(() => {
                receiver = new Receiver();
            }).BeginInvoke(null, null);
 
            Transmitter.ConnectionEstablishedEvent.WaitOne();
 
            receiver.BeginReceive();
            transmitter.BeginTransmit(receiver.SocketEndPoint);
 
            Console.ReadKey();
 
            transmitter.Dispose();
            receiver.Dispose();
        }
    }
 
    public class Transmitter : IDisposable {
 
        private NamedPipeServerStream pipe = new NamedPipeServerStream("MyPipe", PipeDirection.Out);
        private Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
        public Transmitter() {
            socket.Bind(new IPEndPoint(IPAddress.Loopback, 12345));
            socket.Listen(0x7fffffff);
            socket = socket.Accept();
            pipe.WaitForConnection();
            ConnectionEstablishedEvent.Set();
        }
 
        internal static ManualResetEvent ConnectionEstablishedEvent = new ManualResetEvent(false);
 
        public void BeginTransmit(EndPoint socketEp) {
            byte[] data1 = new byte[Program.BufferLength];
            byte[] data2 = new byte[Program.BufferLength];
            pipe.BeginWrite(data1, 0, data1.Length, null, null);
            socket.BeginSendTo(data2, 0, data2.Length, SocketFlags.None, socketEp, null, null);
        }
 
        public void Dispose() {
            socket.Close();
            pipe.Dispose();
        }
    }
 
    public class Receiver : IDisposable {
 
        private NamedPipeClientStream pipe = new NamedPipeClientStream(".", "MyPipe", PipeDirection.In);
        private Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
        public EndPoint SocketEndPoint { get { return socket.LocalEndPoint; } }
 
        public Receiver() {
            socket.Connect(new IPEndPoint(IPAddress.Loopback, 12345));
            pipe.Connect();
        }
 
        public void BeginReceive() {
            DateTime dt = DateTime.Now;
            byte[] sockBuffer = new byte[Program.BufferLength];
            byte[] pipeBuffer = new byte[Program.BufferLength];
            socket.BeginReceive(sockBuffer, 0, sockBuffer.Length, SocketFlags.None, new AsyncCallback(result => { Console.WriteLine("Socket: " + (DateTime.Now - dt).TotalMilliseconds + " мс"); }), null);
            pipe.BeginRead(pipeBuffer, 0, pipeBuffer.Length, new AsyncCallback(result => { Console.WriteLine("Pipe: " + (DateTime.Now - dt).TotalMilliseconds + " мс"); }), null);
        }
 
        public void Dispose() {
            socket.Close();
            pipe.Dispose();
        }
    }
}
результат:
Pipe: 470.0269 мс
Socket: 1341.0767 мс

Добавлено через 2 минуты
Цитата Сообщение от jupy Посмотреть сообщение
Про неуправляемые кучи я ничего не говорил.
а COM куча управляема чтоль? это ж то же самое
2
46 / 46 / 3
Регистрация: 04.02.2011
Сообщений: 199
22.08.2011, 09:08
пробовал через сокеты... localhost, конечно очень хорошо, но если порт занят..
0
0 / 0 / 0
Регистрация: 06.01.2015
Сообщений: 1
29.08.2011, 03:36
Цитата Сообщение от mik-a-el Посмотреть сообщение
the_login, кроме мсдн можно еще книги поискать
Всегда нравятся такие конкретные и самое главное точные ответы на форумах

Есть технология DDE (native) и netDDE (dotNet)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2011, 03:36
Помогаю со студенческими работами здесь

Взаимодействие с приложениями
Здравствуйте. Хочу сделать программу, которая будет взаимодействовать с разными приложениями. К примеру, уже нашёл, как взаимодействовать...

Взаимодействие между Asp.Net и php
Есть сайт на php, который в перспективе должен стать интернет магазином. Появилась необходимость наладить взаимодействие этого сайта с...

Взаимодействие между двумя UserControl
Доброго всем дня! Имеется такой вопрос: Создано главное Окно на WPF, отдельно в этом же пространстве имен создается два UserControlа и...

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

MVVM (Взаимодействие между двумя ViewModel)
Добрый день. Каким образом можно реализовать взаимодействие экземпляров класса(Model) между двумя ViewModel. Допустим когда экземпляры...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel подробные расшифровки по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер