Я пытаюсь выяснить вероятность перехода на ядро с точечной сетью, сейчас выпущен 3.0.Один из наших ключевых компонентов позволяет нашим (частным) нюгетам создавать свои собственные WebAPI, предоставляя события и методы потребителю.Это поддерживает такие функции, как управление удаленными службами или настройка удаленных служб, позволяя API предоставлять настройки / извлечение удаленных настроек и т. Д.
Эта функциональность является ключевой для работы нашей архитектуры микросервисов.
Я пытаюсь повторить это с ядром dotnet, однако я изо всех сил пытаюсь найти прямой эквивалентный учебник / сценарий.Мы по сути следовали процессу, подробно описанному здесь:
https://docs.microsoft.com/en-us/aspnet/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api
Однако, после проверки совместимости пакетов nuget (и все выглядит нормально ..)Теперь я просто получаю исключение нулевой ссылки при вызове WebApp.Start<Startup>(baseaddress);
Исключение нулевой ссылки, очевидно, вызывается несовместимостью пакетов nuget с ядром .net, см. Здесь:
NullReferenceException, с которым столкнулся Owin при запуске .Net Core 2.0 - Настройки?
Решение, приведенное в ссылке, является односторонним, но использует стороннее приложение - NancyFx.Есть ли способ реализовать ту же функциональность с ядром dotnet в его нынешнем виде?Раньше было достаточно документации для самостоятельного хостинга, но, к сожалению, учитывая, что ядро aspnet работает в своем собственном процессе, найти решение очень сложно!
Кто-нибудь может указать мне правильное направление здесь?
Код показан ниже
//the external library would contain all this code. I.e. this could present the configuration endpoints as mentioned above.
public class Startup
{
// This code configures Web API. The Startup class is specified as a type
// parameter in the WebApp.Start method.
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
public class WebAPI:IDisposable
{
private IDisposable _webApp;
public WebAPI()
{
string baseAddress = "http://localhost:8800/";
_webApp = WebApp.Start<Startup>(baseAddress); // << This line throws null reference exception
}
#region IDisposable Support
private bool disposedValue = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
_webApp.Dispose();
_webApp = null;
}
disposedValue = true;
}
}
public void Dispose()
{
Dispose(true);
}
#endregion
}
public class ValuesController:ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
}
Основное приложение, хост / потребитель указанной выше библиотеки.
class Program
{
static void Main()
{
var webapi = new WebApiTest.WebAPI();
Console.WriteLine("Running...");
Console.ReadLine();
webapi.Dispose();
}
}