【问题标题】:OWIN based In-process HTTP Server基于 OWIN 的进程内 HTTP 服务器
【发布时间】:2018-04-14 03:31:02
【问题描述】:

我有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 类似。

【问题讨论】:

  • 如果一切都在进行中,为什么还要使用 HTTP?
  • 我有一个 Web API 服务实现,它基于一个消费客户端,它可以在进程内使用,也可以在 IIS 中托管的常规 Web 服务使用。这里的重点是尽可能多地重用代码。

标签: c# asp.net owin


【解决方案1】:

您可以使用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性能好不好。

【讨论】:

  • 看起来很有希望,谢谢。你知道这个库是否有任何限制,比如性能不佳,在生产系统中使用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多