#c# #wcf #wcf-binding
#c# #wcf #wcf-привязка
Вопрос:
Я использую 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.
- каков наилучший способ идентификации клиентов, другими словами, с помощью какого наилучшего уникального идентификатора я могу идентифицировать клиента?
- если соединение с клиентом сбилось, я не знаю, как это обнаружить и запустить новое с клиента, как если бы я пытался это сделать, он отказывается, и он выдает исключение, что соединение сбито.
извините, если я задал более одного вопроса, пожалуйста, выскажите свое мнение о коде, который я опубликовал, и любой ответ на любой вопрос из приведенных выше.
Комментарии:
1. Пункт 4 — ужасно сложный бизнес!
2. Самый простой способ — просто перехватывать исключения, если что-то пойдет не так, и открывать новое соединение.