Фреймворк 1.1
Два приложения winforms. Связываются через интерфейс, определенный в отдельной сборке, на которую оба имеют референс. Клиент вызывает методы сервера без проблем. Но в момент подписки на событие сервера (+=) получаем такую ошибку:
An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll
Additional information: Cannot find the assembly ClientTestUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
где ClientTestUI — это имя сборки клиента (ехе-шника).
В событии передается 1 ArrayList, никаких кастом типов.
Клиент и сервер находятся в разных каталогах.
Ремоутинг конфигурируется в коде.
Сервер:
BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
IDictionary props = new Hashtable();
props["port"] = 32000;
TcpChannel channel = new TcpChannel(props, clientProv, serverProv);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteServer), "Server",
WellKnownObjectMode.Singleton);
Клиент:
BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
IDictionary props = new Hashtable();
props["port"] = 0;
TcpChannel channel = new TcpChannel(props, clientProv, serverProv);
ChannelServices.RegisterChannel(channel);
_server = (IRemoteServer) Activator.GetObject(typeof (IRenoteServer), "tcp://localhost:32000/Server");
_server.OnUpdate += new UpdateEventHandler(Server_Update); // вот тут мы и валимся
Как это дело бороть?
А>Сервер:
А>А>BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
А>serverProv.TypeFilterLevel = TypeFilterLevel.Full;
А>BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
А>IDictionary props = new Hashtable();
А>props["port"] = 32000;
А>TcpChannel channel = new TcpChannel(props, clientProv, serverProv);
А>ChannelServices.RegisterChannel(channel);
А>RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteServer), "Server",
А> WellKnownObjectMode.Singleton);
А>
А>Клиент:
А>А>BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
А>serverProv.TypeFilterLevel = TypeFilterLevel.Full;
А>BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
А>IDictionary props = new Hashtable();
А>props["port"] = 0;
А>TcpChannel channel = new TcpChannel(props, clientProv, serverProv);
А>ChannelServices.RegisterChannel(channel);
А>_server = (IRemoteServer) Activator.GetObject(typeof (IRenoteServer), "tcp://localhost:32000/Server");
А>_server.OnUpdate += new UpdateEventHandler(Server_Update); // вот тут мы и валимся
А>
А>Как это дело бороть?
Я борол тем, что клиента наследовал от MarshalByRefObject, Если метод Server_Update принадлежит форме, надо придумать какой-нибудь враппер для сервера