基于 OWIN 的进程内 HTTP 服务器

OWIN based In-process HTTP Server

我有 OWIN enabled Web API 2 Service,我想在 .NET 控制台应用程序中托管它,并且该服务的唯一客户端也将在同一应用程序的进程中。因此,任何其他进程都不可能访问该服务的端点。这可能吗?

如果我 运行 我的应用是这样的:

using (WebApp.Start<MyStartup>(new StartOptions(MyUrl) { ServerFactory = "Microsoft.Owin.Host.HttpListener" }))
{
   StartClientThread();

   Console.WriteLine("Press any key to exit");
   Console.ReadLine();
}

然后主机上的任何客户端都可以访问它,但我需要将客户端限制为只能使用相同的进程。

这在没有 OWIN 的情况下是可能的,因此请求是通过使用 HTTP 堆栈 inproc 发送的:

HttpServer server = InitHttpServer();

using (HttpClient client = new HttpClient(server, false))
{
   // use client's methods to send http requests to the service.
}

但我需要与 OWIN 类似。

您可以使用 Microsoft.Owin.Testing nuget 包。这主要是为了测试,但我认为这种情况下它会达到你的目的。

using (var server = TestServer.Create<Startup>())
{
    var result = await server.HttpClient.GetAsync("api/book");
    string responseContent = await result.Content.ReadAsStringAsync();
    var entity = JsonConvert.DeserializeObject<List<string>>(responseContent);
}

如您所见,您可以使用 server.HttpClient 向您的应用发送请求。

就是不知道selfhost的性能好不好