Прямой клиент Orleans в проекте ASP.NET Core
В настоящее время я рассматриваю Орлеан как бэкэнд для основного веб-API-интерфейса Asp.net, и мне было интересно, есть ли у кого-нибудь опыт работы с его новой функцией - "прямым клиентом". Документы Орлеана говорят: " Это позволяет совместно размещать клиента и хранилище таким образом, чтобы клиент мог более эффективно общаться не только с хранилищем, к которому он подключен, но и со всем кластером ", и я знаю, что вы можете написать что-то вроде этого (и это прекрасно работает в консольном приложении):
var silo = new SiloHostBuilder()
.UseLocalhostClustering()
.EnableDirectClient()
.Build();
await silo.StartAsync();
var client = silo.Services.GetRequiredService<IClusterClient>();
Я изо всех сил пытаюсь выяснить, где поместить этот тип кода в проект asp.net, который имеет свой собственный конструктор веб-хостов в "Main" (должен ли он перейти в класс запуска в "ConfigureServices"?). В конце концов, мы стремимся к отдельной настройке клиент / сервер, но для более быстрой разработки было бы полезно поиграть с простой настройкой, которую, по-видимому, допускает прямой клиент. Будем благодарны за любые ссылки на ресурсы и / или примеры решений, содержащих прямой клиент с ядром asp.net. Благодарю.
1 ответ
Для ASP.NET 2.x & Orleans ниже 2.3, я рекомендую создать и запустить хранилище перед веб-хостингом. При настройке веб-хоста введите IGrainFactory
& IClusterClient
экземпляры из бункера (полученные через silo.Services
):
var silo = new SiloHostBuilder()
.UseLocalhostClustering()
.EnableDirectClient()
.Build();
await silo.StartAsync();
var client = silo.Services.GetRequiredService<IClusterClient>();
var webHost = new WebHostBuilder()
.ConfigureServices(services =>
services
.AddSingleton<IGrainFactory>(client)
.AddSingleton<IClusterClient>(client))
.UseStartup<Startup>()
// Other ASP.NET configuration...
.Build();
Для ASP.NET 3.0 и Orleans 2.3 или более поздней версии код интеграции упрощается благодаря добавлению Microsoft.Extensions.Hosting
поддержка в обеих системах:
var host = new HostBuilder()
.ConfigureWebHost(builder =>
{
// Adding IGrainFactory, etc, is not necessary, since Orleans
// and ASP.NET share the same dependency injection container.
builder.UseStartup<Startup>();
})
.UseOrleans(builder =>
{
// EnableDirectClient is no longer needed as it is enabled by default
builder.UseLocalhostClustering();
})
.Build();
await host.StartAsync();