myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » Projekte » Zyan Communication Framework
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Seiten (2): « vorherige 1 [2] Antwort erstellen
Zum Ende der Seite springen  

Zyan Communication Framework

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
..Heinz..
myCSharp.de-Mitglied

Dabei seit: 06.05.2009
Beiträge: 134


..Heinz.. ist offline

Starker Namen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ist es für die nächsten Versionen geplant, dass es einen "starken Namen" gibt?
12.09.2011 08:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Starker Name

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo ..Heinz..,

Danke für den Hinweis. Ich habe einen Starken Namen für Zyan 2.2 eben auf die TODO-Liste gesetzt. Hier kannst Du den Status der Entwickleraufgabe verfolgen:  http://zyan.codeplex.com/workitem/1231

Bis zum release von Zyan 2.2 kannst Du Dir behlfen indem Du die Quellen von Zyan herunterlädst und zum Projekt Zyan.Communication selber einen SNK-Schlüssel zufügst und das Projekt anschließend neu kompilierst.

Für .NET 4.0, .NET 3.5 und mono gibt es getrennte SLN Dateien im Ordner \source.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rainbird am 14.09.2011 07:24.

12.09.2011 22:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
..Heinz..
myCSharp.de-Mitglied

Dabei seit: 06.05.2009
Beiträge: 134


..Heinz.. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

danke für die schnelle Antwort und fürs

genau so habe ich es gemacht und den Key selbst hinzugfügt. Aber wenn es schon ein Nuget Package gibt, dann ist das schon bequemer großes Grinsen

Super Komponente. Hat mir viel Arbeit erspart smile

Gruß ..Heinz..
13.09.2011 08:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
..Heinz..
myCSharp.de-Mitglied

Dabei seit: 06.05.2009
Beiträge: 134


..Heinz.. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi :),

ich habe mehrere Verbindungen zum Zyan-Server aufgebaut (uns sie nach Verwendung wieder Dispose).

Nun bekomme ich jedoch den Fehler:

Fehlermeldung:
Ein Socketvorgang konnte nicht ausgeführt werden, da dem System Pufferspeicher fehlte oder eine Warteschlange voll war

Woher kann das kommen? Ich habe schon gelesen, dass es vorkommt, wenn man einen Port >= 5000 verwendet oder wenn zu viele gleichzeitige Verbindungen offen sind.
16.09.2011 15:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Fehler

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo ..Heinz..,

damit ich den Fehler reproduzieren kann, brauche ich noch ein paar Informationen:
  • Welche Zyan -Version hast Du eingesetzt?
  • Auf welchen Betriebssystemen laufen Client und Server?
  • Welches ProtocolSetup hast Du verwendet?
  • Welche Sicherheitsfeatures hast Du aktiviert?
  • Wie viele Verbindungen hast Du aufgebaut?
Am besten wäre ein Codeschnipsel, wie Du vorgegangen bist.


mycsharp.de  Moderationshinweis von herbivore (18.09.2011 07:49):

Und das ganze bitte per PM. Das abschließende Ergebnis kann und sollte natürlich wieder in den Thread.
 
17.09.2011 17:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Fehler behoben

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo ..Heinz..,

ich habe den Fehler - hoffentlich - behoben. Problemursache war, dass der Client-Remotingkanal bei Aufruf von Dispose nicht richtig deregistriert wurde.

Du kannst den aktualisierten Zyan-Quellcode hier runterladen:  http://zyan.codeplex.com/SourceControl/c...t/changes/13345
18.09.2011 14:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
..Heinz..
myCSharp.de-Mitglied

Dabei seit: 06.05.2009
Beiträge: 134


..Heinz.. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

das wars gewesen :) Super Arbeit. Vielen Dank

Gruß

..Heinz..
19.09.2011 08:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Zyan 2.2 ist released

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

für das Kommunikationsframework Zyan wurde soeben die neue Version 2.2 veröffentlicht. Neben jeder Menge Bugfixes bringt die neue Version folgende Neuerungen mit:
  • Weite Teile des Zyan-Kerns wurden refaktorisiert
  • Clientseitige MEF (Managed Extensibility Framework) Integration
  • Einfachere Integration von eigenen Remoting-Senken möglich
  • Vordefinierte Protocol Setups sind nun individuell erweiterbar
  • Abonnieren von entfernten Delegaten und Ereignissen ist nun wesentlich schneller
  • Zyan kann nun unerwartete Verbindungsabbrüche erkennen
  • Die neue Basisklasse SessionManagerBase vereinfacht die Implementierung einer eigenen Sitzungsverwaltung
  • Zyan.Communication.dll hat nun einen Starken Namen (ist mit SNK-Datei signiert)
  • Strikte Versionierung bei Serialisierung kann nun abgeschaltet werden
Auf folgender Webseite (in Englischer Sprache) gibts eine detaillierte Übersicht über die Änderungen:  What's new in Zyan 2.2?

Die neuen Binaries gibts entweder direkt bei  Codeplex oder als  NuGet-Paket.

Zyan 2.2 unterstüzt .NET Framework 3.5, .NET Framwork 4.0 und Mono 2.8 (oder höher).

Offene Fragen beantworte ich gerne hier auf mycsharp.de oder im  Zyan-Diskussionsbereich.
03.11.2011 21:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 3 Monate.
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Zyan 2.3

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die neue Zyan Version 2.3 ist fertig.

Folgende Neuerungen stecken drin:
  • Sitzungsgebundene Ereignisse (session-bound events)
  • Serverseitige Ereignisfilter
  • Ereignis-Abos werden beim wiederverbinden automatisch wiederhergestellt
  • Call Interception wurde verbessert (Pausierbar + Erweiterungen für leichteres Erstellen von Abfangregeln)
  • HttpCustomClientProtocolSetup unterstützt nun Proxy Server (auch mit Authentifizierung)
  • Remote Streaming funktioniert und wurde durch Unit Tests getestet
  • Zahlreiche Bugs wurden behoben
Weitere Informationen, die aktuellen Binaries und den vollständigen Quellcode gibts auf der  Zyan Codeplex-Seite.

Das Zyan Communication Framework ist nun auch auf Ohloh zu finden:  http://www.ohloh.net/p/zyan

Setzt ihr Zyan in Real-World-Projekten ein?
Falls ja, würde ich mich über eine kurze Rückmeldung im Zyan-Diskussionsbereich  Projects using Zyan Framework (Thread ist allerdings in Englisch!) sehr freuen.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rainbird am 27.02.2012 21:54.

27.02.2012 21:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
..Heinz..
myCSharp.de-Mitglied

Dabei seit: 06.05.2009
Beiträge: 134


..Heinz.. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

ich verwende die aktuelle Version (2.3) und habe vllt. einen "Fehler" festgestellt.

Ich habe einen Server, der eine Funktion implementiert, die als Parameter eine List<T1> erwartet und eine List<T2> zurück gibt.

C#-Code:
public List<T2> Function<T1, T2>(List<T1> list)

Wenn ich vom Client jedoch diese Funktion aufrufe, bekomme ich die Fehlermeldung

Fehlermeldung:
Methode nicht gefunden

Ich habe einen Test gemacht, ob es vllt. daran liegt, dass ich zwei verscheiden Typen verwende (T1 und T2) und habe nur T1 verwendet. Da kan allerdings der gleiche Fehler.

Wenn ich in der Funktion jedoch den Typ fest angebe, dann funktioniert es.

C#-Code:
public List<T1> Function<T1>(List<Article> list)

Woran kann es liegen, dass ich keinen anonymen Typparameter als Funktionsparameter benutzen kann?

Gruß

..Heinz..

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von ..Heinz.. am 16.04.2012 11:13.

16.04.2012 11:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Anonyme Typen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Heinz,

sorry, dass die Antwort erst so spät kommt, aber ich habe momentan sehr viel zu tun, was sich leider negativ auf meine Antwortzeiten auswirkt.

Zitat von ..Heinz..:
Woran kann es liegen, dass ich keinen anonymen Typparameter als Funktionsparameter benutzen kann?

Anonyme Typen werden von Zyan nicht unterstützt. Das liegt daran, dass sie zur Laufzeit erstellt werden und deshalb in einer entfernten Anwendungsdomäne nicht verfügbar sind.

Zyan erkennt die aufzurufende Methode an ihrer Signatur. Dabei sind Methodenname, Typ des Rückgabewerts und die Typen der Parameter relevant. Der Dispatcher (das ist die interne Komponente, welche Remoting-Nachrichten parst und sie in reale Methodenaufrufe auf dem Server verwandelt) überprüft dabei die Typ-Kompatiblität der übergebenen Parameterwerte mit der Methodensignatur. Er kann aber nur dann ermitteln, ob ein Typ mit einem anderen kompatibel ist, wenn er beide kennt.

Anonyme Typen, die zur Laufzeit auf dem Client erzeugt werden, kann der Server nicht kennen. Der Server versucht unbekannte Typen aus den entsprechenden Assemblies nachzuladen. Da anonyme Typen aber flüchtig sind und nicht als Assembly vorliegen, klappt das natürlich nicht. Zyan kann den Typ nicht laden und so auch nicht ermitteln, ob er mit dem entsprechenden Parameter aus der Signatur der aufzurufenden entfernten Methode kompatibel ist. Als Folge davon geht Zyan davon aus, dass für den Aufruf keine passende Überladung vorhanden ist.

So kommt der Fehler "Methode nicht gefunden" zustande.

Es ist theoretisch möglich auch anonyme Typen automatisch auf den Server zu bringen. Dazu müssten aber die Rohdaten des dynamischen Kompilats serialisiert und automatisch mit der Remoting-Nachricht mitgeschickt werden. Derzeit ist so ein Mechanismus nicht in Zyan vorhanden.

Ich sehe das auch kritisch wegen der Performance. Die Rohdaten des anonymen Typs müssten auf dem Server auch wieder in eine ladbare Form gebracht werden. Da würde sich dann die Frage stellen, ob man diese übertragenen anonymen Typen sinvoll cachen kann, also ob man erkennen kann, wann es sich um den selben anonymen Typ handelt.

Für entfernte Methodenaufrufe musst Du derzeit also leider noch auf anonyme Typen verzichten.

Es gibt aber schon ein erfasstes Feature im Zyan Issue Tracker:  http://zyan.codeplex.com/workitem/626

Du bist nicht der Erste, der sich anonyme Typen für entfernte Methodenaufrufe wünscht.

Gruß
Rainbird

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rainbird am 26.04.2012 00:00.

25.04.2012 23:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
..Heinz..
myCSharp.de-Mitglied

Dabei seit: 06.05.2009
Beiträge: 134


..Heinz.. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

kein Problem, dass die Antwort etwas gedauert hat. Zyan ist eine super Komponente und kostenlos. Da kann man es nicht auch noch verlangen, dass man so schnelle Antwortzeiten hat, wie bei einer Komponente, die richtig Geld kostet Augenzwinkern

Schade dass es (noch) nicht funktioniert. Aber es beruhigt mich, dass die Anfrage auch von anderen gestellt wurde :-)

Kannst du es abschätzen, wann es implementiert wird oder ist es nur auf der ToDo-Liste für eine spätere Version, die irgendwann kommt?

Gruß
..Heinz..
26.04.2012 10:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
lmdf lmdf ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.06.2012
Beiträge: 1


lmdf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Echt eine super Komponente.... Funktioniert sehr zuverlässig!!!! Gratulation!
12.06.2012 09:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Danke

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo lmdf,

danke fürs positive Feedback. Freut mich, dass Dir meine Komponente nützlich ist.

Gruß

Rainbird
26.06.2012 08:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 3 Monate.
felix
myCSharp.de-Mitglied

Dabei seit: 30.07.2007
Beiträge: 171
Entwicklungsumgebung: Visual Studio 2015


felix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

ich würde Zyan gerne für ein privates Projekt verwenden. Allerdings müsste ich den Service an eine bestimmte IP-Adresse binden, damit sich die Clients ausschließlich über VPN verbinden können. Ist das irgendwie möglich?
10.10.2012 09:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Binden an bestimmte IP

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo felix,

das ist ganz einfach möglich. Allerdings wird das binden an eine bestimmte IP-Adresse nicht von allen Kanaltypen unterstützt.

Wenn Du keine Events oder Callbacks durch Client-Firewalls hindurch übertragen musst, kannst Du ein TcpCustomServerProtocolSetup wie folgt verwenden:

C#-Code:
// TCP-Protokoll mit unverschlüsselter binärer Datenübetragung
var protocol = new TcpCustomServerProtocolSetup
                   (
                        8080, // TCP-Port
                        new BasicWindowsAuthProvider(), // Authentifizierung mit Windows-Benutzername und Passwort
                        true // Verschlüsselung eingeschaltet
                   );

// TCP-Kanal an bestimmte IP-Adresse binden
//TODO: Statt 192.168.0.10 die gewünschte eigene IP-Adresse einsetzen
protocol.ChannelSettings.Add("bindTo", "192.168.0.10");
protocol.ChannelSettings.Add("machineName", "192.168.0.10"); // Nur setzen, wenn Server eine öffentliche statische IP hat! Bei DynDNS etc. nicht setzen!
protocol.ChannelSettings.Add("useIpAddress", true); // Nur setzen, wenn Server eine öffentliche statische IP hat! Bei DynDNS etc. nicht setzen!

Über die ChannelSettings kann man direkt Einstellungen des Kommunikationskanals einstellen. Das TcpCustomServerProtocolSetup verwendet einen TcpChannel. Dessen Konfigurationseinstellungen kannst Du hier nachlesen:  MSDN Libraray: Channel und Formatter Configuration
Gruß
Rainbird

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Rainbird am 14.10.2012 12:44.

14.10.2012 12:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
felix
myCSharp.de-Mitglied

Dabei seit: 30.07.2007
Beiträge: 171
Entwicklungsumgebung: Visual Studio 2015


felix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

vielen Dank für deine Antwort. Ich werde das in den nächsten Tagen mal ausprobieren :)
15.10.2012 10:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
felix
myCSharp.de-Mitglied

Dabei seit: 30.07.2007
Beiträge: 171
Entwicklungsumgebung: Visual Studio 2015


felix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

dein Beispiel funktioniert einwandfrei. Danke nochmal.
Allerdings habe ich jetzt das Problem, dass der Server ein Event feuern muss, das alle angemeldeten Clients registrieren können. Ich habe bereits in  RainBirds Zyan: Server Event am Client abrufen (oder Alternativen?) ein Beispiel von dir dazu gefunden. Allerdings ist ZyanComponentHost.StartNotificationService() als deprecated markiert.

Mein Event existiert. Es wird vom Server auch gefeuert, allerdnigs kommt es beim Client nicht an.

Hast du vielleicht ein Artikel zur Hand, in dem man nachlesen kann, wie das mit Remote Delegates funktioniert?
Ich habe mit .NET Remoting bisher leider noch nicht so viel gemacht.

Gruß,
Felix
16.10.2012 10:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Events mit Zyan

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo felix,

die einfachste Variante wären ganz herkömmlich Events. Wenn Du Zyan verwendest, kannst Du Events ganz intuitiv verwenden, genau so wie bei ein Click-Ereignis eines Buttons auf einem Windows-Formular.

In der Zyan-Doku gibt es dafür ein Beispiel:  Ereignisse einsetzen

Solche verteilten Ereignisse verhalten sich dabei genauso wie herkömmliche lokale Ereignisse. Die Abonnenten des Ereignisses werden nacheinander aufgerufen. Das ist aber nicht immer das, was man erreichen will. Manchmal möchte man, dass der Server alle registrierten Clients möglichst gleichzeitig informiert. Dann kann man statt Events mit Delegaten arbeiten. Ein einfacher serverseitiger Benachrichtigungsdienst mit Delegaten könnte z.B. so aussehen:

C#-Code:
public class SomeServerComponent : ISomeServerComponent
{
    private ConcurrentDictionary<Guid, Action<string>> _subscribers = new ConcurrentDictionary<Guid, Action<string>>();

    public Guid Subscribe(Action<string> clientCallback)
    {
        if (clientCallback == null)
            throw new ArgumentNullException("clientCallback");

        Guid subscriptionID = Guid.NewGuid();
        _subscribers.TryAdd(subscriptionID, clientCallback);
        return subscriptionID;
    }

    public void Unsubscribe(Guid subscriptionID)
    {
        Action<string> clientCallback;
        _subscribers.TryRemove(subscriptionID, out clientCallback);
    }

    public void NotifyClients(string message)
    {
        Parallel.ForEach(_subscribers.Values, callback =>
        {
            try
            {
                callback(message);
            }
            catch (SocketException)
            {
                //TODO: Ausnahme loggen
            }
            catch (RemotingException)
            {
                //TODO: Ausnahme loggen
            }
        });
    }
}

Der Client kann sich ganz einfach für Benachrichtigungen registrieren.

C#-Code:
ISomeServerComponent proxy = _connection.CreateProxy<ISomeServerComponent>();
proxy.Subscribe(OnServerNotification);

Wenn auf dem Server NotifyClients aufgerufen wird, führt das dann dazu, dass auf dem Client OnServerComponent aufgerufen wird.

C#-Code:
private void OnServerNotification(string message)
{
    Console.WriteLine(message);
}
16.10.2012 14:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
felix
myCSharp.de-Mitglied

Dabei seit: 30.07.2007
Beiträge: 171
Entwicklungsumgebung: Visual Studio 2015


felix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

vielen Dank für deine ausführliche Antwort. Ich gehe das heute abend nochmal ganz genau durch. Irgendetwas übersehe ich momentan noch. Falls es gar nicht klappt, baue ich mal eine Beispiel-Applikation mit der man das Verhalten nachvollziehen kann.

Gruß,
Felix
16.10.2012 14:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
felix
myCSharp.de-Mitglied

Dabei seit: 30.07.2007
Beiträge: 171
Entwicklungsumgebung: Visual Studio 2015


felix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

ich habe gestern dein Beispiel ausprobiert. Es funktioniert alles wunderbar! Vielen Dank nochmal für deine Hilfe :)

Den Service lasse ich auf meinem Linux Server unter Mono 2.10 laufen. Wenn ich den Service im Hintergrund laufen lassen möchte, geht das momentan nur mit  screen, da der Service ansonsten sofort wieder gestoppt wird (auch wenn ich das &-Zeichen hinter den Befehl hänge). Aber das werde ich wohl auch noch irgendwie hinbekommen.

Gruß,
Felix
17.10.2012 09:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Windows-Dienst als Dämon unter Linux laufen lassen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo felix,

mono liefert eine Runtime für Windows-Dienste unter Linux. Damit sollte es möglich sein, Deinen Server als Linux-Dämon im Hintergrund laufen zu lassen.

Schau mal:  Mono Documentation: mono-service

Gruß
Rainbird

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rainbird am 17.10.2012 13:43.

17.10.2012 13:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
felix
myCSharp.de-Mitglied

Dabei seit: 30.07.2007
Beiträge: 171
Entwicklungsumgebung: Visual Studio 2015


felix ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Rainbird,

das habe ich schon probiert. Es gibt sogar eine neue Version "mono-service2". Aber ich hatte immer einen der folgenden Fälle:

1) Der Service wurde erwartungsgemäß in den Hintergrund verschoben, hat aber auf Client-Verbindungsanfragen nicht mehr reagiert.
2) Der Service wurde beim Starten sofort wieder beendet.

Irgendwo in den untiefen des Mono-Forums habe ich dann gelesen, dass mono-service unter Debian nicht richtig funktioniert. ich glaube ich werde das demnächst nochmal in einer virtuellen Maschine durchtesten.

EDIT:
Ich habe mich jetzt nochmal genauer mit dem Thema Services unter Mono beschäftigt. Ich bin bisher davon ausgegangen, dass "mono-service2" die neuere Version von mono-service ist. mono-service2 ist aber einfach nur für .NET 2.0.

Wenn man aber einen Windows-Service damit hostet (d.h. wenn die Service-Klasse von System.ServiceProcess.ServiceBase erbt), dann funktioniert alles wunderbar. Ich hatte vorher versucht, eine normale Konsolen-Anwendung mit mono-service laufen zu lassen. Das funktioniet aber scheinbar nicht.

Gruß,
Felix

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von felix am 09.11.2012 13:11.

17.10.2012 13:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Zyan 2.4 veröffentlicht

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Zusammen,

Zuerst möchte ich mich für die über 650 Downloads bei NuGet und über 3400 Downloads auf Codeplex seit der Veröffentlichung von Zyan bedanken.
Viele der Features, die Zyan inzwischen mitbringt, sind durch das rege Feedback der Community angeregt worden.
Ich hoffe, dass auch die neue Version 2.4 so regen Zuspruch findet.

Neben zahlreichen Bugfixes bietet Zyan 2.4 folgende neue Features:
  • Komprimierung des Datenverkehrs (besonders nützlich bei langsamen Intrnetverbindungen)
  • Verbesserungen beim Handling von verteilten Ereignissen
    - Ereignisse für Single-Call- und Singleton-Komponenten verwenden nun die selbe Semantik
    - Ereignisse werden serverseitig nun standardmäßig asynchron verarbeitet
    - Alte synchrone Ereignisverarbeitung kann bei Bedarf über ZyanComponentHost.LegacyBlockingEvents eingeschaltet werden
    - Registrierung und Deregistrierung von Ereignissen kann nun auch über Call-Interception abgefangen und im Verhalten dynamisch geändert werden
  • Verbesserungen bei der Clientverbindung (ZyanConnection)
    - ZyanConnection.Reconnected-Ereignis benachrichtigt nun bei Verbindungswiederherstellung nach einem abgefangenen Abbruch der Socketverbindung
    - Das zu verwendende Client-Protokoll wird nun automatisch anhand des angegebenen Verbindungs-URLs erkannt
  • Verbesserungen beim TCP-Duplex-Transportkanal
    - Unterstützt nun explizite Bindung an eine bestimmte Netzwerkkarte auf mehrfach vernetzten Computern (bindTo Kanaleinstellung; Analog zum Standard-TCP-Transportkanal)
    - Unterstützt nun Initiierung der Socketverbindung bei der Ersten Verbindung (einstellbar über ConnectDuringCreation Parameter)
  • Neuer Null-Transportkanal für Test- und Monitoringzwecke
  • Verbesserte Kompatibilität zum Mono Framework
Eine Liste mit allen Neuerungen und Bugfixes findet ihr unter:  http://zyan.codeplex.com/releases/view/84528.

Eine detaillierte Beschreibung der neuen Features steht auf folgender Seite:  What´s new in Zyan 2.4?

Die Binaries könnt ihr hier runterladen:  Zyan 2.4 Download

Zyan 2.4 kann auch bequem über NuGet gezogen werden:  NuGet Gallery | Zyan 2.4

Liste mit Referenzen:  Projects using Zyan Framework

Wenn ihr Bugs findet, meldet sie bitte im Issue Tracking System:  Zyan Issue Tracking

Fragen, Anregungen und Diskussionen gerne hier auf mycsharp.de oder direkt im  Zyan Diskussionsbereich

Gruß
Rainbird

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rainbird am 12.11.2012 20:56.

12.11.2012 20:49 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 2 Jahre.
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Zyan 2.6 veröffentlicht

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Zusammen,

Zyan 2.6 ist da!
Die neue Version bringt folgende Neuerungen mit:
  • Unterstützung für Android (in Verbindung mit Xamarin Mono for Android!); Bereits ab Zyan 2.5
  • Automatische Ermittlung laufender ZyanComponentHost-Instanzen im LAN ( #2085)
    - Findet automatisch und asynchron laufende Zyan-Server im LAN
    - Findet Server anhand ihres Namens und/oder der Serverversion
    - Verwendet UDP broadcasts (Unabhängig von Adresse und Port des Zyan-Servers)
    - Discovery ist standardmäßig ausgeschaltet und muss bei Bedarf explizit aktiviert werden
    - Wird durch Aufrufen von "zyanHost.EnableDiscovery()" eingeschaltet
    - Clientseitig "ZyanConnection.DiscoverHosts(name, callback)" aufrufen, um lafende Server zu suchen
  • Registrieren und Deregistrieren von Ereignishandlern erfolgt nun standardmäßig nebenläufig ( #2308):
    - Altes Verhalten (blockiert den Thread, bis Ereignisregistrierung abgeschlossen ist) kann über "ZyanSettings.LegacyBlockingSubscriptions" wiederhergestellt werden
  • Unterstützung für Synchronisierungskontext für Callbacks und Ereignisse ( #1827):
    - Vereinfacht die Ereignisbehandlung in UI-Anwendungen (WPF, Windows.Forms)
    - Ist standardmäßig ausgeschaltet und muss bei Bedarf explizit aktiviert werden
    - Kann bei Proxyerstellung einzeln aktiviert werden
    - ZyanCatalog aktiviert Synchronisierungskontext-Unterstützung standardmäßig für alle Proxies, die er erzeugt
  • Wiederverbinden von entfernten Ereignissen wird nun mittels schneller Stapelverarbeitung durchgeführt (statt durch Einzelaufrufe in einer Schleife) ( #2309)
  • Neues Ereignis: ZyanComponentHost.ClientLogonCanceled (bei Anmeldungsabbruch) ( #2318)
  • Neue Eigenschaft: AuthRequestMessage.ClientAddress (enthält die IP-Adresse des Clients)
  • Unterstützung für AuthorizedGroup und ExclusiveAddressUse Einstellungen für IPC Protokoll-Setups ( #2345)
  • Unterstützung für .NET Framework v4.5/4.5.1 ( #2295)
  • Neues Beispiel Projekt: Zyan Drench, ein Spiel für Android, 50K+ Downloads bei Google Play
Detaillierte Liste der behobenen Bugs:  https://zyan.codeplex.com/releases/view/110163

Auf diesen Wegen könnt ihr die neue Version 2.6 ziehen:Bugs könnt ihr wie immer auf CodePlex im  Issue Tracker melden.

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Rainbird am 12.12.2014 00:28.

12.12.2014 00:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
mcdt
myCSharp.de-Mitglied

Dabei seit: 25.09.2011
Beiträge: 55


mcdt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Rainbird:
- Neues Beispiel Projekt: Zyan Drench, ein Spiel für Android, 50K+ Downloads

Hi,

auch wenn das Spiel nur ein Nebenprdukt zu sein scheint: Daumen hoch
Was noch nett wäre bzgl. des Spiels: aktuell scheint es nur auf Telefonen zu laufen. Auf meinem Nexus 10 Tablet lässt sich das Spiel installieren und die App öffnen, aber nach einem Klick auf "Play against Android" schließt sich die App wieder.
17.12.2014 12:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 4 Monate.
elTorito elTorito ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3263.gif


Dabei seit: 28.07.2009
Beiträge: 176
Entwicklungsumgebung: VS 2015, SQL 2008 Dynamics NAV
Herkunft: Niederrhein


elTorito ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich möchte meine Anwendung auf Asynchron umstellen, zum testen versuche ich folgendes Beispiel:

C#-Code:
public async Task<bool> SqlConnectionExistsAsync()
{
  try
  {
    return await zyanProxy.SqlConnectionExistsAsync();
  }
  catch (Exception ex)
  {
    System.Diagnostics.Debug.WriteLine("ex " + ex.Message);
  }
}

public interface ILogonServiceAsync : ILogonService
    {
        Task<bool> SqlConnectionExistsAsync();
    }

//Zyan program.cs:
catalog1.RegisterComponent<ILogonServiceAsync, LogonService>();

public async Task<bool> SqlConnectionExistsAsync()
        {
            string connString = ConfigurationManager.ConnectionStrings["ExampleConnection"].ConnectionString;

            using (SqlConnection connection = new SqlConnection(connString))
            {
                try
                {
                    await connection.OpenAsync();
                    return true;
                }
                catch (SqlException ex)
                {
                    return false;
                }
            }
        }

Die Verbindung kommt zustande, der user loggt ein.

Der Debugger steigt mir anschließend aus im Zyan ConnectionErrorEventHandler. mit :

Fehlermeldung:
Der Typ "System.Threading.Tasks.Task`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" in Assembly "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ist nicht als serialisierbar gekennzeichnet.

Habe versucht mir das hier abzugucken:
 http://zyan.codeplex.com/discussions/347146

Was mache ich falsch? Wie könnte ich es richtig machen?

Danke.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von elTorito am 08.05.2015 13:59.

08.05.2015 13:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zicore Zicore ist männlich
myCSharp.de-Mitglied

Dabei seit: 27.06.2007
Beiträge: 403
Entwicklungsumgebung: VS2015


Zicore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hast du denn das Zielframework auf mindestens Net 4.5 umgestellt?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Zicore am 08.05.2015 14:47.

08.05.2015 14:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
elTorito elTorito ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3263.gif


Dabei seit: 28.07.2009
Beiträge: 176
Entwicklungsumgebung: VS 2015, SQL 2008 Dynamics NAV
Herkunft: Niederrhein


elTorito ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von TheGear:
Hast du denn das Zielframework auf mindestens Net 4.5 umgestellt?

Ja. Auf 4.5
Und die ZyanCommunication.dll 4.5 von 43825 (2.6?)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von elTorito am 08.05.2015 15:16.

08.05.2015 15:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
elTorito elTorito ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3263.gif


Dabei seit: 28.07.2009
Beiträge: 176
Entwicklungsumgebung: VS 2015, SQL 2008 Dynamics NAV
Herkunft: Niederrhein


elTorito ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die gleiche Methode Synchron, kommt kein Fehler.

Habe nun nochmal die Asynchrone getestet, die Methode wird korrekt ausgeführt, liefert im beispiel oben True/false je nachdem ob SQL Server vorhanden, aber eben "Ist als nicht serialisierbar" gekennzeichnet. Hmm...
11.05.2015 08:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
elTorito elTorito ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3263.gif


Dabei seit: 28.07.2009
Beiträge: 176
Entwicklungsumgebung: VS 2015, SQL 2008 Dynamics NAV
Herkunft: Niederrhein


elTorito ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

Alex(yallie) war so  freundlich

falls mal noch jemand das braucht:
Daumen hoch

Zitat:
Hi Peter,

Use async methods on the client side only.
Don't use Task types in your interfaces, they are not serializable anyway.
Whenever you call a server method, wrap the call with Task.Run().

Just as simple as that.

Here is an example:

C#-Code:
// note that server component interface is synchronous
public interface ISampleService
{
    string GeneratePassword(int length);
}

// and client code is asynchronous
using (var conn = await Task.Run(() => new ZyanConnection(url, protocol)))
{
    var proxy = conn.CreateProxy<ISampleService>();

    var password = await Task.Run(() => proxy.GeneratePassword(length));
    Console.WriteLine("Server generated password: {0}", password);
}

The complete code for this example is located here:
 https://gist.github.com/yallie/7d263d3a44c0c0936a7e

Regards, Alex
22.05.2015 13:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 3 Monate.
nickname8 nickname8 ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.08.2015
Beiträge: 3
Entwicklungsumgebung: VS 2015 Prof.


nickname8 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Leute,
ich bin neu hier im Forum und hab sofort eine Frage zum Zyan Framework. Kann ich das hier stellen? Sonst können die Mods mir gerne Bescheid geben und ich verschiebe meine Frage an die entsprechende Stelle.

Meine Frage ist, ob ich an einem Zyan-Client erstelltes Objekt (mit der connection.CreateProxy-Methode) einer Methode eines anderen Objektes übergeben kann?
Beispiel:

C#-Code:
var hTasse = connection.CreateProxy<ITasse>();
var hSchrank = connection.CreateProxy<ISchrank>();

hSchrank.StelleRein(hTasse);

Bei mir passiert es beim Methodenaufruf, dass ich eine "MissingMethodException" bekomme, weil der die Mehtode Schrank.InitializeLifetimeService() nicht findet. Diese Methode kommt aus dem Zyan-Framework, die hab ich nicht programmiert.

Kann mir da einer weiterhelfen?

Gibt es sonst irgendwo eine Dokumentation mit Code-Beispielen von Zyan? Ist schon eine mega super Sache, aber leider bringen mir die reinen Methodennamen und Klassen aus der API nicht so viel Infos, dass ich das ohne weitere Erklärung verstehe.

Danke schonmal!!!
28.08.2015 23:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Rainbird Rainbird ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2834.jpg


Dabei seit: 28.05.2005
Beiträge: 3.720
Entwicklungsumgebung: Visual Studio 2012
Herkunft: Mauer

Themenstarter Thema begonnen von Rainbird

Rainbird ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo nickname8,

Dokumentation zu Zyan findest Du hier:  Zyan Dokumentation (deutsch)

Code-Beispiele findest Du hier:  Codeplex: Zyan Code-Beispiele (Examples)

Nun zu Deinem Probelm. Sowohl Tasse als auch Schrank sind auf einem Zyan-Server veröffentlichte Remote-Komponenten. Du versuchst, einen clientseitigen Verweis auf die entfernte Komponente Tasse an die entfernte Komponente Schrank zu übergeben. Das wird so nicht unterstützt.

Zyan trennt strikt zwischen Client und Server. Der Server bietet Funktionalität an, der Client konsumiert sie. Wenn Client und Server Daten austauschen, dann muss dies über Typen gemacht werden, die serialisierbar sind (Also alle Typen, die ISerializable implementieren oder mit [Serializable] gekennzeichnet sind, und primitive Typen wie int, string, byte, etc.)

Es gibt deshalb grundsätzlich zwei Kategorien von Klassen:
  • Komponenten, die Funktionalität anbieten
  • Datenklassen, welche zum verseden von Daten übers Netzwerk eingesetzt werden
Damit Dein Beispiel funktioniert, müsste Tasse eine serialisierbare Datenklasse sein und NICHT als Remote-Komponente am Zyan-Server veröffentlicht werden. Es könnte z.B. eine Komponente "TassenFabrik" geben, welche Tassen produziert und die fertigen Tassen als Datenklassen zurückgibt. Die kann man dann mit proxySchrank.StelleRein(datenTasse) auch an den entfernten Schrank schicken.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rainbird am 30.08.2015 12:27.

30.08.2015 12:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegt mehr als ein Monat.
nickname8 nickname8 ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.08.2015
Beiträge: 3
Entwicklungsumgebung: VS 2015 Prof.


nickname8 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,
super, vielen Dank! Das hilft mir schonmal sehr weiter! Werde meine Software entsprechend designen.
Jetzt hab ich noch eine andere Frage: Ich möchte die Klassen ebenfalls in eine PCL schreiben, damit sowohl Client als auch Server damit umgehen kann. Die CL muss portable sein, damit ich das auch in entsprechenden Xamarin-Projekten nutzen kann. Jetzt ast du geschrieben, dass die Datenklassen serialisierbar sein müssen. [Serializable] ist aber nicht verfügbar für PCLs. Dafür kann ich andere 3rd party PCLs nutzen. Kann/Muss ich Zyan irgendwie sagen, wie der (de)serialiseren soll?
Ich möchte zum Beispiel Newtonsoft Json.net zum serialisieren nutzen. Wenn ich jedoch die entsprechenden Attribute in die zu serialisierbaren Klassen schreiben, bekomme ich trotzdem eine SerializationException.
LG

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von nickname8 am 09.10.2015 15:29.

09.10.2015 10:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Seiten (2): « vorherige 1 [2] Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 7 Jahre.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2017 myCSharp.de-Team. Alle Rechte vorbehalten. 24.09.2017 23:13