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