Отсутствует канальная раковина - PullRequest
1 голос
/ 15 мая 2011

Здравствуйте, я пишу проект, который использует шаблон .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);
}

Это дает мне сообщение об ошибке:Этот удаленный прокси не имеет приемника каналов, что означает, что либо у сервера нет зарегистрированных каналов сервера, которые прослушивают, либо у этого приложения нет подходящего клиентского канала для связи с сервером.

Что я делаю неправильно?

...