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
Proponuję skorzystać z obiektów COM+ lub WebService' ów.
DCOM jest bardziej adekwatny
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.
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 ;)
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.
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>