我正在寻找一种方法来处理基于 ServiceStack 框架的服务中的非阻塞请求。所以我看到有 AppHostHttpListenerLongRunningBase 类(我现在需要一个自托管的应用程序)但是没有任何很好的例子如何使用这个类。
让我们看一个简单的例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using ServiceStack.ServiceHost;
using ServiceStack.ServiceInterface;
using ServiceStack.WebHost.Endpoints;
public class Hello
{
public String Name { get; set; }
}
public class HelloResponse
{
public String Result { get; set; }
}
public class HelloService : Service
{
public Object Any(Hello request)
{
//Emulate a long operation
Thread.Sleep(10000);
return new HelloResponse { Result = "Message from " + request.Name };
}
}
public class HelloAppHost : AppHostHttpListenerLongRunningBase
{
public HelloAppHost()
: base("Hello App Services", typeof(HelloService).Assembly)
{
}
public override void Configure(Funq.Container container)
{
Routes
.Add<Hello>("/hello")
.Add<Hello>("/hello/{Name}");
}
}
class Program
{
static void Main(string[] args)
{
var appHost = new HelloAppHost();
appHost.Init();
appHost.Start("http://127.0.0.1:8080/");
Console.ReadLine();
}
}
因此,如果我运行应用程序并发出两个请求,它们将以串行模式执行,并且响应之间会有大约 10 秒的延迟。那么有没有办法执行非阻塞请求(如果有自托管应用程序解决方案会更好)。
PS:我知道有一个基于 Redis 的解决方案,但由于某些原因它不适合。