делегаты на разных машинах - PullRequest
1 голос
/ 21 июля 2011

кажется, что это должно быть очень легко, но я не могу найти в Google ничего по этому поводу:
У меня есть сервер видеомагазина, и у него есть несколько клиентских приложений, установленных на компьютерах пользователей, которые общаются через (скажем) веб-сервисы.
Когда DVD возвращается, я хотел бы иметь возможность уведомить пользователей, которые ожидали этого DVD.

Если вы работаете с одним приложением, то нет проблем с использованием делегатов.
Мой вопрос: может ли этот подход работать и с удаленными клиентами?

Ответы [ 4 ]

1 голос
/ 21 июля 2011

Для этого вы можете использовать дуплексный сервис WCF.

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

0 голосов
/ 26 августа 2011

Если вы не хотите изобретать колесо, используйте инструмент очереди сообщений.Затем, когда DVD возвращается, вы помещаете сообщение в какую-то очередь.Пользователи регистрируются в очередях интересующих их DVD.

Тогда связь постоянна и асинхронна.пользователи получают уведомления, даже если они находятся в автономном режиме (они получат его после подключения и опроса очереди)

0 голосов
/ 21 июля 2011

Если вы хотите иметь клиентское приложение, которое предоставит делегата, с которым люди могут соединиться, тогда да. Для этого вы бы использовали .net remoting.

Я использовал этот пример: http://www.codeproject.com/KB/dotnet/DotNetRemotingEventsExpl.aspx

По сути, вы собираетесь предоставить удаленный сервер, который публикует известный объект. Уловка с событиями состоит в том, что сервер должен знать о типе, к которому клиент подключает обработчики событий. Поэтому в этом случае вы также предоставляете абстрактный класс в качестве приемника событий.

В основном этот класс будет выглядеть примерно так:

public abstract class MyEventSinkClass : MarshalByRefObject
{
   public abstract void MyAbstractEventHandler(string arg1, string arg2);

   public void MyEventHandler(string arg1, string arg2)
   {
       MyAbstractEventHandler(arg1,arg2);
   }
}

Тогда на стороне клиента они будут создавать класс и наследовать от MyEventSinkClass. Они помещают свою логику для обработки события в переопределение для MyAbstractEventHandler. Когда они подключают экземпляр, для которого они используют удаленное взаимодействие, вместо подключения, как обычно, им необходимо подключиться к своему экземпляру класса, который наследует MyEventSinkClass, к методу MyEventHandler. Затем, когда событие сработает, оно в конечном итоге вызовет переопределенный метод и выполнит их код.

Подробную информацию о настройке удаленного сервера и клиента можно найти по ссылке, которую я дал, это не сложно.

0 голосов
/ 21 июля 2011

Да - вы можете использовать .NET Remoting.См. Эту статью для простого примера:

http://www.codeproject.com/KB/IP/remotingandevents.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...