Laden...

.Net Remoting Callback Problem

Erstellt von lord_fritte vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.403 Views
L
lord_fritte Themenstarter:in
553 Beiträge seit 2007
vor 14 Jahren
.Net Remoting Callback Problem

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?

6.911 Beiträge seit 2009
vor 14 Jahren

Hallo,

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!"

3.728 Beiträge seit 2005
vor 14 Jahren
Callbacks und Events in Remoting

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.

365 Beiträge seit 2004
vor 14 Jahren

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