Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
.Net Remoting Callback Problem
lord_fritte
myCSharp.de - Member



Dabei seit:
Beiträge: 553

Themenstarter:

.Net Remoting Callback Problem

beantworten | zitieren | melden

Hallo ich möchte gerne bei .Net Remoting ein Callback realisieren.

Server:


class Program
  {
    static void Main(string[] args)
    {
      Service service = new Service();

      TcpChannel channel = new TcpChannel(2606);
      ChannelServices.RegisterChannel(channel);
      RemotingServices.Marshal(service, "MyService", typeof(IService));

      Console.WriteLine("Server: Server gestartet...");

      char input = 'q';

      do
      {
        input = Console.ReadKey().KeyChar;

        service.Fire();

      } while (input != 'q');

      Console.ReadKey();
    }
  }

  class Service : MarshalByRefObject, IService
  {
    #region IService Member

    public event CallbackMessageDelegate OnCallbackMessage;

    public void Fire()
    {
      if (OnCallbackMessage != null)
        OnCallbackMessage(null);
    }

    #endregion
  }

Client:


class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Client: Zum starten beliebige Taste drücken.");
      Console.ReadKey();

      IService service= (IService)Activator.GetObject(typeof(IService), "tcp://localhost:2606/MyService");
      CallbackMessageCls callback = new CallbackMessageCls();

      service.OnCallbackMessage += new CallbackMessageDelegate(callback.CallbackMessage);

      Console.ReadKey();
    }
  }

  public class CallbackMessageCls : CallbackMessageSink
  {

    public override void CallbackMessage(Message message)
    {
      
    }
  }

Interface:


public delegate void CallbackMessageDelegate(Message message);

  [Serializable]
  public class Message : MarshalByRefObject
  { 
  
  }

  public abstract class CallbackMessageSink : MarshalByRefObject
  {
    public void FireCallbackMessage(Message message)
    {
      CallbackMessage(message);
    }

    public abstract void CallbackMessage(Message message);
  }

  public interface IService
  {
    event CallbackMessageDelegate OnCallbackMessage;
  }

Beim Client bekomme ich eine Exception:
Der Typ System.DelegateSerializationHolder und die davon abgeleiteten Typen (z.B. System.DelegateSerializationHolder) dürfen in dieser Sicherheitsebene nicht deserialisiert werden.

Habe ich irgenwas vergessen?
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.819
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,
Zitat
Habe ich irgenwas vergessen?
Ja, voher im Forum zu suchen ;)

http://www.mycsharp.de/wbb2/search.php?searchid=789974


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3.728
Herkunft: Mauer

Callbacks und Events in Remoting

beantworten | zitieren | melden

Hallo lord_fritte,

hier findest Du ein allgemein gehaltenes Benachrichtigungssystem, welches Callsbacks und Events in Verbindung mit Remoting verwendet: NotificationService als Erweiterung zu Rainbirds ApplikationServer Beispiel

Das sollte Dir weiterhelfen.
private Nachricht | Beiträge des Benutzers
Christoph Burgdorf
myCSharp.de - Member

Avatar #avatar-2915.jpg


Dabei seit:
Beiträge: 365
Herkunft: Hannover

beantworten | zitieren | melden

Hallo lord_fritte,

mal ganz konkret zu der Fehlermeldung: In der Standardkonfiguration dürfen bestimmte Typen nicht deserialisiert werden. Dazu zählen unter anderem Delegaten. Daher musst du TypeFilterLevel auf Full stellen, damit die Deserialisierung klappt.

Gruß

Christoph
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Christoph Burgdorf am .
private Nachricht | Beiträge des Benutzers