基于 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的性能好不好
我有 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的性能好不好