我正在使用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
}
}
是否有人可以使用其他人的callBack?
罐
答案 0 :(得分:1)
这是一个非常模糊的问题,但我想我明白你想要达到的目标。首先,OperationContext.Current.GetCallbackChannel肯定会为您提供服务的调用者,无论哪个客户端。另一个客户端(至少在Windows上)将无法使用相同的TCP通道,因为它已经在使用中。
现在,如果您正在谈论身份验证,或者如何确保调用该服务的客户端是合法的,那么这是一个不同的主题。