Здравствуйте, я пишу проект, который использует шаблон .NET Remoting и Observer.
Сервер:
BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
IDictionary props = new Hashtable();
props["port"] = 51317;
props["typeFilterLevel"] = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
props["name"] = "ServerChannel";
TcpChannel channel = new TcpChannel(props, clientProv, serverProv);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Tracker.Bl.Account.AccountManager), "AccountManager", WellKnownObjectMode.SingleCall);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Tracker.Bl.Account.AccountFVO), "AccountFVO", WellKnownObjectMode.SingleCall);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Tracker.Bl.Project.ProjectItemTracker), "ProjectItemTracker", WellKnownObjectMode.Singleton);
Клиент:
this.thisUserId = userId;
this.instName = "Dev" + userId.ToString();
this.tracker = (ProjectItemTracker)Activator.GetObject(typeof(Tracker.Bl.Project.ProjectItemTracker), "tcp://localhost:51317/ProjectItemTracker");
this.Subscribe(this.tracker);
BinaryClientFormatterSinkProvider clientProv = new BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
IDictionary props = new Hashtable();
props["port"] = 51318;
props["typeFilterLevel"] = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
props["name"] = "ClientChannel";
TcpChannel channel = new TcpChannel(props, clientProv, serverProv);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownClientType(typeof(Tracker.Bl.Project.ProjectItemFVO), "ProjectItemFVO");
Теперь, когда ясделать обновление с "admin", пользовательские уведомления должны быть отправлены:
ProjectItemFVO loc = (ProjectItemFVO)Activator.GetObject(typeof(Tracker.Bl.Project.ProjectItemFVO), "tcp://localhost:51318/ProjectItemFVO");
this.tracker.ProjectItemsChanged(loc);
Однако, когда обрабатывается событие ProjectItemsChanged
:
foreach (var observer in observers) {
observer.OnNext(loc);
}
Это дает мне сообщение об ошибке:Этот удаленный прокси не имеет приемника каналов, что означает, что либо у сервера нет зарегистрированных каналов сервера, которые прослушивают, либо у этого приложения нет подходящего клиентского канала для связи с сервером.
Что я делаю неправильно?