1

我将 NetTcpBinding 与 WPF 客户端一起使用。我想知道CallBackChanel(OperationContext.Current.GetCallbackChannel)是否可以被其他人欺骗......我可以确定,如果我将这个CallBack对象存储在一个列表中,这个回调就不能使用被别人...

例子:

        private class ClientCallBack
    {
        public IDuplexServiceCallBack CallBack { get; set; }
        public long UserId { get; set; }
        public bool IsAuthenticate { get; set; }
        public DateTime LastPing { get; set; }
        public DateTime LastPong { get; set; }
        public bool Fault { get; set; }
        public long Ping { get; set; }
    }
    static List<ClientCallBack> Clients;

     public void Login(string UserName, string Password)
    {
        var auth = new AutentificationService();
        var user = auth.Login(UserName, Password, true, null);
        if (user != null)
        {
            Clients.Add(new ClientCallBack()
            {
                CallBack = OperationContext.Current.GetCallbackChannel<IDuplexServiceCallBack>();,
                Fault = false,
                IsAutenticate = true,
                LastPing = DateTime.Now,
                LastPong = DateTime.Now,
                Ping = 0,
                UserId = user.Id
            });
        }
    }
     public void action() {
        var client = Clients.FirstOrDefault(o => o.CallBack == OperationContext.Current.GetCallbackChannel<IDuplexServiceCallBack>(););
        if (client != null && client.IsAutenticate)
        { 
        //This client is authenticated 
        }
    }

有人可以使用其他人的回调吗?

坦克

4

1 回答 1

1

这是一个非常模糊的问题,但我想我理解你想要表达的意思。首先,OperationContext.Current.GetCallbackChannel 肯定会为您提供服务的调用者,无论可能是哪个客户端。另一个客户端(至少在 Windows 上)将无法使用相同的 TCP 通道,因为它已经在使用中。

现在,如果您正在谈论身份验证,或者如何确保调用该服务的客户端是合法的,那是一个完全不同的话题。

于 2013-05-02T18:27:59.417 回答