[.NET] Struktura aplikacji systemu rozproszonego

0

Witam!
Poszukuję informacji na temat struktury aplikacji w .Net, w szczególności dla systemu rozproszonego.
Przez strukturę rozumiem moduły z jakich składa się aplikacja oraz węzły w
jakich poszczególne moduły rezydują. Dodatkowo poszukuję schematy
technik tworzenia aplikacji w .Net (skrypty, serwlety, komponenty) , w których są budowane rozproszone aplikacje w .Net.
Jak na razie szukając w googlach dużo nie znalazłem, może ma ktoś jakieś info, linki itp.
Z góry dziękuję i pozdrawiam

0

Proponuję skorzystać z obiektów COM+ lub WebService' ów.

0

DCOM jest bardziej adekwatny

0
mach3 napisał(a)

ja opisałem sposób działania .NET Remoting (wg literatury to następca DCOM'a) jednak wykładowca stwierdził, że sama technologia komunikowania się obiektów w systemie rozproszonym go ne interesuje, on chce abym przedstawił strukturę aplikacji roproszonej, czyli jakieś tam moduły tej aplikacji, mówił coś jeszcze o horyzontalnym o wertykalnym podziale. Oczywiście referat do poprawki, szukam dalej ;)

Jakos nie mam "szacunku" do wykladowcow, posluguje sie jakimis abstrakcyjnymi definicjami, pojeciami a jak im by przyszlo stwoprzyc program to nie potrafią nawet zaczać, znam to z praktyki.

0

ja opisałem sposób działania .NET Remoting (wg literatury to następca DCOM'a) jednak wykładowca stwierdził, że sama technologia komunikowania się obiektów w systemie rozproszonym go ne interesuje, on chce abym przedstawił strukturę aplikacji roproszonej, czyli jakieś tam moduły tej aplikacji, mówił coś jeszcze o horyzontalnym o wertykalnym podziale. Oczywiście referat do poprawki, szukam dalej ;)

0

glina - a powinienes tego szacunku nabrac, moze sie wtedy nauczysz wiecej.. informatyka to nie tylko tworzenie programow, tworzeine programow to nie tylko pisanie kodu. tak na prawde przynajmniej 60% pracy w napisaiu programu lezy w jego zaprojektowaniu, obmysleniu jak on ma wygladac 'z gory' - tego wlasnie wymaga najwyraniej ow wykladowca.

mach3 - znaczy sie ze wykladowca prosi Cie o przemyslenie architektury/projektu systemu nad ktorym pracujesz. napisz cos wiecej o samym temacie.

0

Witajcie, z całym szacunkiem ;) chciałbym się z wami podzielić pewnym zagadnieniem które mnie z lekka gnębi.
Mam do napisania programik rozproszony w środowisku .Net. No i piszę go sobie grzecznie w Visual Studio 2005, ale ni stąd ni zowąd wyskakuje mi jakiś brzydki błąd w momencie gdy próbuję zlecić serwerowy wykonanie zadania.

Całe źródło projektu wraz z programem mam tutaj: CalkowanieRozproszone.zip

Będę wam bardzo wdzięczny za info gdzie coś poknociłem :)

Pozdrawiam, Witek,

Jak co to jestem dostępny na GG 6172501

Źródło Formy Klienta:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels;
using Zestaw;

namespace SortowanieRozproszone
{
    public delegate string CalkowanieDelegate(InterfejsZestawu serwer, Calkowanie Parametry);

    public partial class Form1 : Form
    {
        public static Form1 Forma;

        public Form1()
        {
            InitializeComponent();
            Forma = this;
        }

        public bool PrzygotujSerwery()
        {
            int i;
            Serwery = new serwer[serwery.Lines.Length];

            for (i = 0; i < serwery.Lines.Length; i++)
            {
                Serwery[i] = new serwer();
                if ((serwery.Lines[i].Trim().Length == 0) || (Serwery[i].Inicjuj(serwery.Lines[i].Trim(), null, null) == null))
                {
                    MessageBox.Show("Brak odpowiedzi ze strony serwera: " + Serwery[i].Nazwa() + ".", "Błšd",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            }
            return true;
        }

        public int PierwszyPracujacy()
        {
            int i;
            for (i = 0; i < Serwery.Length; i++)
                if (!Serwery[i].Wolny()) return i;
            return -1;
        }

        public int PierwszyWolny()
        {
            int i;
            for (i = 0; i < Serwery.Length; i++)
                if (Serwery[i].Wolny()) return i;
            return -1;
        }

        public int PierwszySkonczony()
        {
            int i;
            for (i = 0; i < Serwery.Length; i++)
                if (Serwery[i].Gotowy())
                    return i;
            return -1;
        }

        public string Wywolaj(InterfejsZestawu serwer, Calkowanie Parametry)
        {
            return serwer.Calkoj(Parametry);
        }

        private void button1_Click(object sender, EventArgs e)
        {
                if (serwery.Lines.Length <= 0)
                {
                    MessageBox.Show("Podaj co najmniej jeden serwer!", "Błšd",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                if (!PrzygotujSerwery()) return;

                liczbaSerwerow.Text = " " + serwery.Lines.Length;

                int i;
                string Pi;
                Calkowanie Parametry = new Calkowanie(int.Parse((string)elementy.SelectedItem));

                DateTime teraz = new DateTime();
                teraz = DateTime.Now;

                button1.Enabled =
                serwery.Enabled =
                elementy.Enabled = false;

                for (i = 0; i < serwery.Lines.Length; i++)
                {
                    Serwery[i].Oddelegowany = new CalkowanieDelegate(this.Wywolaj);
                    Serwery[i].Stan=Serwery[i].Oddelegowany.BeginInvoke(Serwery[i].Interfejs, Parametry, null, null);
                }
                while ((i = PierwszyPracujacy()) != -1)
                {
                    Application.DoEvents();
                    if ((i = PierwszySkonczony()) != -1)
                    {
                        Pi = Serwery[i].Oddelegowany.EndInvoke(Serwery[i].Stan);
                        Serwery[i].Oddelegowany = null;
                        Serwery[i].Stan = null;
                    }
                }

                TimeSpan duration = DateTime.Now - teraz;
                czasSortowania.Text=duration.Milliseconds+"ms";

                button1.Enabled =
                serwery.Enabled =
                elementy.Enabled = true;
           }
    }
}
</code=csharp>

Żródło formy serwera:
```csharp
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Text;
using Zestaw;

namespace SortowanieRozproszoneSerwer
{
    public partial class Form1 : Form
    {
        public static Form1 Forma;

        public Form1()
        {
            InitializeComponent();
            Forma = this;
        }

        private void button1_Click(object sender, EventArgs e)
        {
                int port = System.Convert.ToInt32(textBoxPort.Text);
                TcpChannel chan = new TcpChannel(port);
                ChannelServices.RegisterChannel(chan, false);
                RemotingConfiguration.RegisterWellKnownServiceType(
                       typeof(Serwer), "Serwer",
                       WellKnownObjectMode.Singleton
                       );
                button1.Text = " Serwer Aktywny ";
                button1.BackColor = System.Drawing.Color.Lime;
                textBoxPort.Enabled =
                button1.Enabled = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            progressBar1.Value++;
        }
    }

    public class Serwer : MarshalByRefObject, InterfejsZestawu
    {
        public override object InitializeLifetimeService()
        {
            return null;
        }

        public string Calkoj(Calkowanie Parametry)
        {
            MessageBox.Show("Podaj co najmniej jeden serwer!", "Błšd",
            MessageBoxButtons.OK, MessageBoxIcon.Error);

            DateTime teraz = new DateTime();
            teraz = DateTime.Now;

            Form1.Forma.progressBar1.Value = 0;
            Form1.Forma.progressBar1.Maximum = (int)Parametry.LiczbaProb();

            Form1.Forma.StanSerwera.Text += "[" + teraz.Hour + ":" + teraz.Minute + "] Losuję punkty dla " + Form1.Forma.progressBar1.Maximum + " prób...";

            Form1.Forma.Refresh();

            for (Form1.Forma.liczbaProb.Text = (Form1.Forma.progressBar1.Value = 0)+""; Form1.Forma.progressBar1.Value < Form1.Forma.progressBar1.Maximum; Form1.Forma.liczbaProb.Text=(Form1.Forma.progressBar1.Value++)+"")
            {
                Parametry.CalkojPi(Form1.Forma.Wykres);
                Form1.Forma.Refresh();
            }

            TimeSpan duration = DateTime.Now - teraz;
            teraz = DateTime.Now;

            Form1.Forma.StanSerwera.Text += "[" + teraz.Hour + ":" + teraz.Minute + "] Calkowanie zakończone w czasie ";
            Form1.Forma.liczbaProb.Text = duration.Milliseconds+" ms";

            Form1.Forma.Refresh();
            return "";
        }
    }
}
</code=csharp>

1 użytkowników online, w tym zalogowanych: 0, gości: 1