Межпроцессное общение в .net

Тема в разделе ".NET", создана пользователем Real-Mulik, 12 апр 2007.

Статус темы:
Закрыта.
  1. Real-Mulik

    Real-Mulik Гость

    У меня есть служба, написанная в .NET, однако хотелось бы создать интерфейс, в виде формы,который мог бы отображать текущее состояние службы... Фактически в идеале надо, чтобы другой процесс (форма должна независимо от процесс открывать и закрываться пользователем) получил доступ к потоку служы и ко всем его объектам.. Однако подозреваю что такое не возможно. Поэтому хотелось бы хотябы реализовать сообщения от служы к форме и, возможно, обратно. В своих поисках я наткнулся на .NET Remote, однако у меня не стоит задачи создать распределенное приложение.. и создание объектов службы по идее не должно происходить из формы... форма должна получить доступ у уже существующим объектам... вобщем как такое можно замутить?
     
  2. Real-Mulik

    Real-Mulik Гость

    Отвечаю сам себе.

    Да такое возможно. Для этого надо взять: Сервер (прога, которая работает, в маем случае это служба), Ресурс(класс, к к которому будем получать доступ), Клиент (тот кто будет получать доступ).

    1. СЕРВЕР: В данном премере я взял за WindowsApplication. Не забудьте подключить дополнительно библиотеку System.Runtime.Remoting.dll. На форме висят 2 кнопки и TextBox
    Код (Text):
    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels.Http;

    public partial class Server : Form
    {
    public Server()
    {
    InitializeComponent();
    }
    Modification M;
    private void button1_Click(object sender, EventArgs e)
    {
    HttpChannel chanel = new HttpChannel(8080);
    ChannelServices.RegisterChannel(chanel);
    M = new Modification();
    M.Midif("Best");
    ObjRef obj = RemotingServices.Marshal(M, "Muri");
    this.Text = ("ObjRef.URI: " + obj.URI);
    textBox1.Text = "Running. Press Enter to end publication.";
    }
    private void button2_Click(object sender, EventArgs e)
    {
    textBox1.Text = M.text;
    }
    2. Класс с которым будем работать. Я его положил в отдельный файл в приложение сервера.
    Код (Text):
    namespace WA
    {
    public class Modification:MarshalByRefObject
    {
    public string text = "";
    public void Midif(string str)
    {
    text = str;
    }
    }
    }
    3. Клиент. 2-ое приложение WindowsApplication, которое никоеим боком к перову не касается.. лишь с отличем что надо добавть ссылку на тот класс который будм брать т.е. на приложение СЕРВЕР для доступа к классу Modification. Класс можно положить в DLL и сделать Reference к ниму 2-х приложений. На форме висят: кнопка и Label.
    Код (Text):
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    using System.Runtime.Remoting.Channels.Http;
    using WA;

    namespace ClientW
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    HttpChannel chanel = new HttpChannel(0);
    ChannelServices.RegisterChannel(chanel);
    RemotingConfiguration.RegisterWellKnownClientType(Type.GetType("WA.Modification, WA"),"http://localhost:8080/Muri");
    Modification M = new Modification();
    label1.Text = M.text;
    M.Midif("ffff");
    }
    }
    }
    данная штука позволяет получить доступ к экземпляру объекта сразу двум(!) процессам, что позволяет быстро и легко настроить между ними общение... однако данный пример показывает лишь простейший пример.. на самом деле все на сного круче :)
     
  3. karlito

    karlito Гость

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

    .NET Remoting - это слишком круто для такой задачи. да и не надо.
     
  4. Real-Mulik

    Real-Mulik Гость

    COM в .NET? Нет спасибо.. я уж как-нить так...
     
  5. karlito

    karlito Гость

    Поковыряй работу по IPC каналам на Remoting. Не так тяжело получиться.
    В следующей версии фреймворка 3.5, если не ошибаюсь с версией, появится API на управляемом коде для работы по IPC каналам.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей