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
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.
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);
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
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/
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
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.
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
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
Antwort ist zu finden unter: Rainbirds Zyan: Mehere Objekte publishen