Вы не можете придать его (сохраняя ссылочный идентификатор) - это будет небезопасно. Например:
public interface IFruit {}
public class Apple : IFruit {}
public class Banana : IFruit {}
...
List<Apple> apples = new List<Apple>();
List<IFruit> fruit = apples; // Fortunately not allowed
fruit.Add(new Banana());
// Eek - it's a banana!
Apple apple = apples[0];
Теперь вы можете преобразовать List<Apple>
в IEnumerable<IFruit>
в .NET 4 / C # 4 из-за ковариации, но если вы хотите List<IFruit>
, вам придется создайте новый список. Например:
// In .NET 4, using the covariance of IEnumerable<T>
List<IFruit> fruit = apples.ToList<IFruit>();
// In .NET 3.5
List<IFruit> fruit = apples.Cast<IFruit>().ToList();
Но это not то же самое, что и приведение исходного списка, потому что теперь есть два отдельных списка. Это безопасно, но вам нужно понять, что изменения, внесенные в один список , не будут отображаться в другом списке. (Модификации объектов , которые будут отображаться в списках, конечно.)
Возможно, вы захотите открывать нового источника для каждой сессии , возможно, не открывать и не закрывать для каждого запроса . И это будет сделано на бэкэнде, а не на фронтэнде.
Но веб-сервер, состоящий из клиента Kafka, ничем не отличается под уровнем HTTP от обычного консольного приложения; Вы принимаете входящий запрос, десериализуете его, затем, при необходимости, анализируете, затем снова сериализуетесь для вывода Kafka, а затем, необязательно, возвращаете что-то пользователю.
Если вы действительно спрашиваете: «Кафка с HTTP-запросами возможна», независимо от языка и платформ, то, конечно, Confluent REST Proxy работает аналогично, только на Java 116]
Что касается отслеживания веб-приложений, я бы посоветовал изучить Divolte Collector