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

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

28.06.2010, 22:41. Показов 19982. Ответов 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 2
вот как-то так...
0
0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 6
29.06.2010, 10:52  [ТС] 3
Интересно, но TCP мне использовать нежелательно (забыл сказать), даже в формате localhost, поскольку конечные приложения будут стоять на сервере где я не контролирую файервол.
0
Администратор
83993 / 52581 / 244
Регистрация: 10.04.2006
Сообщений: 13,469
29.06.2010, 11:07 4
Lolcht0, ремотинг - устаревшая технология.
the_login, используйте WCF.
Цитата Сообщение от the_login Посмотреть сообщение
поскольку конечные приложения будут стоять на сервере где я не контролирую файервол.
Открывать определенные порты все равно придется.
2
0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 6
29.06.2010, 11:19  [ТС] 5
mik-a-el, да, вот уже начал читать msdn.

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

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

Про неуправляемые кучи я ничего не говорил.
0
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
02.07.2010, 23:40 13
признаЮ, был неправ. слишком давно их трогал
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 14
пробовал через сокеты... localhost, конечно очень хорошо, но если порт занят..
0
0 / 0 / 0
Регистрация: 06.01.2015
Сообщений: 1
29.08.2011, 03:36 15
Цитата Сообщение от mik-a-el Посмотреть сообщение
the_login, кроме мсдн можно еще книги поискать
Всегда нравятся такие конкретные и самое главное точные ответы на форумах

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru