Laden...

Remoting-Helfer

Erstellt von Rainbird vor 17 Jahren Letzter Beitrag vor 13 Jahren 66.463 Views
365 Beiträge seit 2004
vor 14 Jahren

Hallo Rainbird,

erstmal ein großes Dankeschön, dass du diese Klasse mit samt Beispielen hier veröffentlicht hast. Das Teil ist wirklich genial.

Ich versuche mich gerade ein wenig in .NET Remoting einzuarbeiten und habe nun versucht in der Klasse ServerSideCalc ein Event zu feuern, auf das ich dann im Client reagieren kann. Das scheint aber so out of the box nicht möglich zu sein, oder mache ich etwas falsch?

Gruß

Christoph

Rainbird Themenstarter:in
3.728 Beiträge seit 2005
vor 14 Jahren
Remoting-Helfer Erweiterungen

Hallo zusammen,

schön dass Euch mein Remoting-Helfer so gut gefällt. Trotz WCF bevorzuge ich nach wie vor Remoting als Technologie für verteilte Anwendungen.

@jeansen: Den Timeout kannst Du über die Channelsettings auf dem Client festlegen:


// Timeout auf 30 Sekunden festlegen
channelSettings["timeout"] = (uint)30;

@bvsn: Events solltest Du nicht unbeacht einsetzen, da Du bei verteilten Anwendungen immer damit rechnen musst, dass einer der beteiligten PCs plötzlich offline geht. Wenn der Client sein Event-ABO aber vorher nicht beendet hat, versucht der Server ihn trotzdem zu benachrichtigen. Dies versucht er, bis er einen Timeout bekommt. In der Standardeinstellung würde das bedeuten, dass die Server-Anwendung bei jeder Event-Benachrichtigung 30 Sekunden lang einfriert.
Man kann aber trotzdem Events verwenden, muss allerdings immer auf Offline-Clients prüfen. Mit der nötigen Vorsicht und der Tatsache im Hinterkopf, dass man mehrere Anwendungsdomänen hat, sind Events mit Remoting also völlig in Ordnung. Hier findest Du Infos über mögliche Event-Implementierungen mit Remoting und ihre Vor- und Nachteile http://www.codeproject.com/KB/IP/remotingandevents.aspx
Events funktionieren auch grundsätzlich mit dem Remoting-Helfer.

U
21 Beiträge seit 2009
vor 14 Jahren

danke rainbird.
nettes kleines projekt.
das beste HOWTO was ich zu diesem thema bis jetzt gefunden habe.

int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);
C
51 Beiträge seit 2010
vor 13 Jahren

Hi,

auch, wenn der Thread schon etwas älter ist, muss ich ihn nochmal ausgraben 😃

danke erstmal für Deine Mühen so eine Klasse zu schreiben.
Ich bin ein völliger Remoting Neuling und habe mit Freuden deine Klasse gefunden 😃

Leider habe ich Probleme bei der Verwendung.
Derzeit ist Remoting Server und Client der selbe PC. Dieser befindet sich auch in einer Domäne.

RemotingHelper.PublishObjectOverTCP(new myClass(), "test", 9400, true, true);
myClass klasse = (myClass)RemotingHelper.GetRemoteObjectOverTCP(typeof(myClass), "test", "localhost", 9400, true, true);

Der Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzulässig 127.0.0.1:9400

Wenn ich Dein Testprojekt starte funktioniert das einwandfrei.
Ich bin etwas ratlos.

Ich arbeite in VS2010 .net 4.0

Danke für die Hilfe
caldi

Rainbird Themenstarter:in
3.728 Beiträge seit 2005
vor 13 Jahren
Fehler eingrenzen

Hallo caldicot,

mein Projekt läuft auf dem selben PC ohne Probleme? Das ist seltsam.

Wird die Ausnahme vom Client oder vom Server geworfen?
Hast Du mal versucht, einen anderen Port zu verwenden?
Welche Berechtigungen haben die Benutzer, unter denen die beiden Prozesse laufen?

Ganz nebenbei: Für größere Projekte ist der Remoting-Helfer ein bischen unterdimensioniert. Hier findest Du ganz aktuell den großen Bruder: http://zyan.codeplex.com/

C
51 Beiträge seit 2010
vor 13 Jahren

Danke für Deine schnelle Antwort.

Der Client wirft die Ausnahme.
Port habe ich variiert - von 9400 bis 10000.
Server und Client laufen auf dem selben PC unter dem selben Benutzer, und der ist lokaler Administrator (kein Domänen Admin)

Habe auch schon zum Test, alle Firewalls etc. ausgeschaltet. Leider ohne Erfolg.
An dem .NET Versionsunterschied kann es nicht liegen?
Firewalls habe ich eigtl. auch ausgeschlossen, da ja Dein Projekt ohne Probleme funktioniert.
Dein Projekt basiert auf .NET 2.0, wenn ich das richtig gesehen habe.
Im Moment nutze ich eben wie gesagt 4.0.

Danke für den Link, damit werde ich mich mal näher beschäftigen 😃
So groß ist mein Projekt nicht.
Ich versuche eigtl. nur mit Remoting zurecht zu kommen.
Geplant ist 2 Klassen zu publishen, die beide ein static DataSet mit je 2 Tables enthalten.

Ich probiere das Ganze nochmal mit dem Zyan Projekt.
Selbstversändlich gebe ich Rückmeldung, wenn ich Erkenntnisse habe.

Fast vergessen:
Ich nutze Windows 7 Ultimate 64bit

Danke
caldi

Rainbird Themenstarter:in
3.728 Beiträge seit 2005
vor 13 Jahren

Hallo caldicot,

ich habe eine Version des Remoting-Helfers mit .NET 4.0 erstellt. Bei mir konnte ich keine Probleme feststellen.

Eingesetztes Betreibssystem: Windows Vista Ultimate 64-Bit

Ist zwar kein Windows 7, aber das sollte sich bei Sockets nicht anders verhalten.

Bitte schau mal, ob meine .NET 4.0 Version bei Dir läuft.

P.S.: Zyan ist genauso einfach einzusetzen, wie der Remoting-Helfer.

C
51 Beiträge seit 2010
vor 13 Jahren

Hallo,

ich habe gerade Zyan getestet. Da hat es sofort funktioniert.
Ich weiss nicht woran das liegen könnte.

Vorallem habe ich es anschließend nochmal mit dem RemotingHelper probiert, da hat es dann auch geklappt...

Danke für die Hilfe

Danke
caldi

C
51 Beiträge seit 2010
vor 13 Jahren

Hi,

also ich habe gerade mein Problem gefunden.
Meine Klasse hieß User und mein Interface entsprechend IUser.
Anscheinend sind das "Schlüsselwörter" für C# und es wird etwas anderes damit verknüpft.
Ich habe die Klasse jetzt neu angelegt und myUser bzw myIUser genannt. Jetzt klappt es.

Eine Frage habe ich noch, die ich auf der Zyan Homepage nicht gefunden habe:
Es steht dort, dass man mehrere Objekte publishen kann.

Allerdings schaff ich das nicht.
Probiert hätte ich das einfach, indem ich noch ein host.registerComponent ausgeführt hätte.
Da bringt er auch keinen Fehler.

Aber ich weiss nicht, wie ich am Client dann 2 proxies verwenden kann.


myIUser userProxy = connection.CreateProxy<myIUser>();

zusätzlich anzugeben funktioniert nicht.

Oder muss ich für jede Componente eine eigene Connection aufbauen?

Hättest Du bitte hier ein kleines CodeSnippet da, indem ich das sehe 😃

Vielen Dank für die Hilfe
caldi

Rainbird Themenstarter:in
3.728 Beiträge seit 2005
vor 13 Jahren

Antwort ist zu finden unter: Rainbirds Zyan: Mehere Objekte publishen