Я использую wsDualHttpBinding в сервисе wcf и использую следующий код для хранения клиентских каналов:
public static void Subscribe()
{
try
{
// Subscribe the guest to the beer inventory
var guest = OperationContext.Current.GetCallbackChannel<ILoggingServiceCallBack>();
if (!CallbackList.Contains(guest))
{
CallbackList.Add(guest);
}
}
catch (Exception ex)
{
//do stuff
}
finally
{
//do stuff
}
}
и я перезваниваю клиентам вот так:
public static void LoggingCallBack(Action<ILoggingServiceCallBack> callbackNotification)
{
try
{
if (OperationContext.Current != null)
{
var guest = OperationContext.Current.GetCallbackChannel<ILoggingServiceCallBack>();
if (!CallbackList.Contains(guest))
{
CallbackList.Add(guest);
}
}
foreach (var LoggingCallBack in CallbackList)
{
var temp = LoggingCallBack;
try
{
new Thread(() =>
{
try
{
callbackNotification(temp);
}
catch (Exception ex)
{
//do something
}
}).Start();
}
catch (Exception ex)
{
//do somethin
}
}
}
catch (Exception ex)
{
//doing something
}
finally
{
//doing something
}
}
Я переживаю некоторые неприятности:
- У меня нет возможности узнать, находится ли клиент в сети или нет, прежде чем я позвоню
это обратно.
- мне нужно иметь возможность удалить клиента после отсутствия активности из
список, я думаю, я мог бы сделать это, если бы я достиг номера 1.
- каков наилучший способ идентификации клиентов, другими словами, что такое
лучший уникальный идентификатор, с которым я могу идентифицировать клиента?
- если соединение с клиентом оборвалось, я не знаю, как обнаружить
это и начать новый с клиента, как будто я пытался сделать, что он отказывается, и это выдает исключение, что соединение разорвано.
извините, если я задал более одного вопроса, пожалуйста, выскажите свое мнение о коде, который я разместил, и ответьте на любой вопрос выше.