2016-02-29 2 views
0

Скажем, у меня есть 3 клиентов: Клиент A Клиент B и Клиент C.Как отправить сообщение конкретному клиенту с помощью WampSharp?

функция Все поддержка Ping(), которые они регистрируют с помощью отражения (код, основанный на WampSharp документации):

public interface IArgumentsService 
{ 
    [WampProcedure("com.arguments.ping")] 
    void Ping(); 
} 

public class ArgumentsService : IArgumentsService 
{ 
    public void Ping() 
    { 
    } 
} 

IArgumentsService services = channel.RealmProxy.Services; 
ArgumentService callee = new ArgumentService(this); 
services.RegisterCallee(callee); 

Затем я настроить прокси на каждом клиенте, чтобы сделать исходящие вызовы:

DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); 
IWampChannel channel = channelFactory.CreateJsonChannel("ws://127.0.0.1:8080/", "realm1"); 
Task channelOpenTask = channel.Open(); 
channelOpenTask.Wait(); 
IArgumentsService proxy = channel.RealmProxy.Services.GetCalleeProxy<IArgumentsService>(); 

Как будет идти о передаче сообщений от клиента А для клиента C? Я не вижу способа обращения к конкретному клиенту при отправке сообщения на маршрутизатор через прокси-сервер? Все, что я могу сделать, это следующее:

proxy.Ping(); 

Я предполагаю, что будет транслировать сообщение всем клиентам? Как я могу указать только один клиент? Поддерживается ли этот сценарий использования?

ответ

2

В соответствии с спецификацией базового профиля WAMP невозможно зарегистрировать одну и ту же процедуру более одного раза в царстве маршрутизатора. Следующий код приведет к исключению при регистрации (wamp.error.procedure_already_exists). Чтобы достичь чего-то, как вы хотите, рассмотрите возможность регистрации другой процедуры uri на клиента. Это может быть достигнуто с помощью ICalleeRegistrationInterceptor.

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