2009-08-26 2 views
1

Я пытаюсь решить, что является наиболее подходящим способом обработки полнодуплексной связи между двумя процессами .Net, выполняющимися на одном и том же сервере или в локальной сети. У нас есть два процесса, которые должны иметь возможность ссылаться на методы друг на друга.Двусторонняя связь с WCF. Должен ли я использовать обратные вызовы или просто использовать два канала?

В настоящее время мы используем WCF с каналами NamedPipe или Tcp и имеем Регистр ProcessA с ProcessB. Наш контракт WCF определяет интерфейс обратного вызова, поэтому ProcessB может затем вызывать методы на ProcessA.

Мой вопрос: какой из следующих вариантов имеет больше смысла, проще и надежнее?

  1. Имеет ли ProcessB интерфейс обратного вызова (поддерживается WCF) для вызова методов в ProcessA.
  2. Во время регистрации ProcessA передает ProcessB необходимую информацию для ProcessB для регистрации в ProcessA с использованием нового канала?

Я не совсем понимаю время жизни прокси-сервера обратного вызова и проблемы с потоками. Я видел различные сообщения о блокировании методов обратного вызова.

ответ

3

Вашего вариант 2 в основном только описание того, что делает WCF для вас в варианте 1.

Когда клиент открывает соединение, он регистрирует обратный канал с помощью службы. Этот канал остается открытым до тех пор, пока вы его не закроете - либо явно вызовите Close на нем, либо удалив его.

Итак, в описанном вами сценарии звучит так, как будто вы должны просто продолжить контракты обратного вызова. Для этого они и есть.

+0

Может ли канал обратного вызова существует после того, как исходный канал был закрыт, или его можно рассматривать как функции обратного вызова специально для исходного канала? – DanJ

+0

@DanJ: Что вы подразумеваете под «исходным каналом»? Если вы имеете в виду клиентский канал, который инициирует сеанс, то: no - когда вы закрываете клиентский канал, вы также закрываете канал обратного вызова. Если вам нужно, чтобы канал обратного вызова оставался открытым, вам нужно иметь две полностью отдельные службы. Возможно, я неправильно понял ваш вопрос, но у меня сложилось впечатление, что это не так. –

1

Вариант 2 действительно описывает, что делает вариант 1, но он реализует свои способы, которые вы не могли сделать сами. Например, если вы используете TCP-каналы, он будет использовать Socket, который клиент открывает серверу для отправки данных.

Это означает, что он будет работать за брандмауэром и NAT.

заказ

http://diagonaltechblog.blogspot.com/2009/12/wcf-duplex-channels-firewalls-and-nats.html

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

Приветствие

Смежные вопросы