0

假设我有 3 个客户:客户 A、客户 B 和客户 C。

它们都支持 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>();

我将如何从客户端 A 向客户端 C 发送消息?通过代理向路由器发送消息时,我没有看到解决特定客户端的方法?我能做的只有以下几点:

proxy.Ping();

我猜这会向所有客户广播一条消息?如何仅指定单个客户端?甚至支持这种使用场景吗?

4

1 回答 1

3

根据 WAMP 基本配置文件规范,每个路由器领域不能多次注册相同的过程。以下代码将导致注册异常(wamp.error.procedure_already_exists)。为了实现您想要的效果,请考虑为每个客户端注册不同的过程 uri。这可以使用 ICalleeRegistrationInterceptor 来实现。

于 2016-02-29T14:08:45.223 回答