Я пытаюсь разобраться с удалением .NET в попытке репликации в .NET VB6 ActiveX EXE.Обновление GUI во время переадресации с событиями
До сих пор у меня есть однострочный экземпляр, созданный на сервере, с которым могут делиться все клиенты.
Singleton принимает запросы от клиентов и проверяет данные, возвращая проверенные данные в форме события. Это хорошо работает - классы, которые запрашивают ссылку на Singleton, активируют свои события, т. Е. Отправляют данные, получают подтвержденные данные.
Однако мне нужен интерфейс. Клиенты размещаются в приложении WPF (сервер тоже), и когда они получают данные, мне нужно обновить отображение (текстовое поле, список, что угодно), чтобы отразить связь между клиентами и синглглтоном.
Однако, как только я добавляю событие, реализованное в основной форме для вызова клиентом, как только он получил ответ от Singleton, я сталкиваюсь с ошибками во время выполнения, жалуясь, что основная форма не имеет атрибутов сериализации ....
Чтобы сохранить это сжатый я опишу процесс следующим образом
сервера работает с кодом:
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
//
IDictionary myDictionary = new Hashtable();
myDictionary["name"] = String.Format("PracticonChannel_{0}", Port);
myDictionary["typeFilterLevel"] = TypeFilterLevel.Full;
myDictionary["port"] = Port.ToString();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
http = new HttpChannel(myDictionary, clientProvider, serverProvider);
// Register RemotingShared.SingletonObject as a
// Singleton Server-Activated type.
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(Practicon.RemotingShared.UploadObjectSingleton), // Server-activated type
"SingletonService", // objectUri
WellKnownObjectMode.Singleton // Singleton instancing mode
);
RemotingConfiguration.ApplicationName = " Upload Server";
RemotingConfiguration.RegisterActivatedServiceType(
typeof(Practicon.RemotingShared.UploadObjectSingleton));
клиентов получить сервер активированных одноплодной по:
HttpChannel http1;
// Set the formatters of the messages for delivery.
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
//
IDictionary myDictionary = new Hashtable();
myDictionary["name"] = String.Format("PracticonChannel_{0}", Port);
myDictionary["typeFilterLevel"] = TypeFilterLevel.Full;
myDictionary["port"] = port.ToString();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
http1 = new HttpChannel(myDictionary, clientProvider, serverProvider);
ChannelServices.RegisterChannel(http1, false);
uploadObj= (UploadObjectSingleton)Activator.GetObject(
typeof(UploadObjectSingleton),
fullAddress);
//---------- Here's the problem...
uploadObj.ReplyEvent += new UploadObjectReplyEventHandler(OnUploadReply);
OnUploadReply - это событие, реализованное в форме, которое обновляет различные элементы управления. Когда это назначено во время выполнения, исключения Сериализации происходят из-за того, что основная форма не имеет атрибута сериализации.
Это сводит меня с ума. Может ли кто-нибудь показать/объяснить/рассказать/проповедовать/читать лекции о том, как я обновляю пользовательский интерфейс в ответ на события, выпущенные в одиночном режиме?
Почему бы не использовать новый WCF для удаленного доступа? – Paparazzi
Поскольку вы используете WPF, я предлагаю вам внедрить шаблон MVVM, не обновляя свой интерфейс, реализуя обработчики событий в вашем окне. – SpaceghostAli
Причина, по которой я использовал удаленный доступ (насколько я мог бы собрать), был самым близким к ActiveX EXE. Интерфейс, который захватывает одноэлемент, а затем просит его обрабатывать данные, должен быть доступен через com, чтобы его можно было использовать в существующем приложении VB6. Я не знаю, может ли это быть достигнуто в WCF. –