المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : DelegateSerializationHolder is not permitted to be deserialized at this security level



C# Programming
08-14-2009, 02:22 PM
I'm not sure how much code you need to see to handle this problem.
I am trying to add the ability for any logged-on client to send a message to all other logged-on clients.
My server code looks like this:
public OedipusServer
{
// Register our tcp channel
bool ensureSecurity = true;
RemotingConfiguration.Configure("oedipus.exe.config", ensureSecurity);

UserList insUserList = UserList.Instance;
ObjRef refUserList = RemotingServices.Marshal(insUserList, "UserList");
... // More classes instanced here
ServerClass insServerClass = ServerClass.Instance;
ObjRef refAServerClass = RemotingServices.Marshal(insServerClass, "Messaging");
}
public class ServerClass : AbstractServer
{
private static ServerClass mInstance = null;
public static ServerClass Instance
{
get
{
if (mInstance == null)
mInstance = new ServerClass();
return mInstance;
}
}
public override Object InitializeLifetimeService()
{
return null;
}
public override void myStatusHasChanged(int userID, int newStatus)
{
FireNewBroadcastedMessageEvent(userID, newStatus);
}
public event StatusChangedEventHandler myStatusChangedHandler;
public override event StatusChangedEventHandler myStatusChangedEvent
{
add
{
myStatusChangedHandler = value;
}
remove
{
}
}
protected void FireNewBroadcastedMessageEvent(int userID, int newStatus)
{
myStatusChangedHandler(userID, newStatus);
}
}

I have another project, Messaging, which looks like this:
public delegate void StatusChangedEventHandler(int userID, int newStatus);
public abstract class AbstractServer : MarshalByRefObject
{
public abstract void myStatusHasChanged(int userID, int newStatus);
public abstract event StatusChangedEventHandler myStatusChangedEvent;
}
public abstract class AbstractBroadcastedMessageEventSink : MarshalByRefObject
{
public void callbackStatusChanged(int userID, int newStatus)
{
internalCallbackStatusChanged(userID, newStatus);
}
protected abstract void internalCallbackStatusChanged(int userID, int newStatus);
}

On the client side I have:
class EventSink : AbstractBroadcastedMessageEventSink
{
protected override void internalCallbackStatusChanged(int userID, int newStatus)
{
// Handle event here
}
}
private AbstractServer rmMessaging;
public Office()
{
rmMessaging = (AbstractServer)Activator.GetObject
(typeof(AbstractServer),
System.Configuration.ConfigurationManager.AppSettings
["AbstractServerUrl"]);
EventSink sinkStatusChanged = new EventSink();
// Subscribe to event
rmMessaging.myStatusChangedEvent +=
new StatusChangedEventHandler(sinkStatusChanged.callbackStatusChanged);
}
private void button1_Click(object sender, EventArgs e)
{
// Initiate the event
rmMessaging.myStatusHasChanged(23, 14);
}


It's subscribing to the event which raises the runtime error "DelegateSerializationHolder is not permitted to be deserialized at this security level".