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();
}
}
したがって、アプリを実行して 2 つの要求を行うと、それらはシリアル モードで実行され、応答間に約 10 秒の遅延が生じます。ノンブロッキング リクエストを実行する方法はありますか (セルフ ホスト アプリ ソリューションがある場合)。
PS: Redis ベースのソリューションがあることは知っていますが、いくつかの理由で適切ではありません。