я добился определенного прогресса. когда клиент вызывает сервис в первый раз, в конструкторе я сохраняю его IP-адрес и его текущий контекст операции.
затем, если подключается кто-то с того же ip, я прерываю предыдущий канал, который использовал этот ip-адрес (последнее соединение имеет приоритет):
operationContext.Channel.Abort();
Я проверил это, и оно, кажется, освобождает сеанс, чтобы другие могли его использовать, но я не уверен - это лучшее решение?