19

サービススタックプロジェクト内でSignalRを使用することは可能ですか?現在、RESTWebAPIにサービススタックを使用しています。そのアーキテクチャ、柔軟性などに全体的に満足しています。現在、イベント駆動型またはプッシュ型の手法(ステータスのポーリングと比較して)を使用して、呼び出し元のクライアントと通信する方法を模索しています。現在、AppHostHttpListenerBase(IIS内でのホスティング)を使用して、WindowsサービスでAPIをホストしていることに注意してください。

何らかの方法でSignalRHubに渡される専用ルートを構成して、これら2つを共存させることはできますか?たとえばhttp://localhost:8000/api/live/jobs/jobid、SignalRコードにヒットしますがhttp://localhost:8000/api/jobs/jobid、現在のDTOベースのサービススタックコードにルーティングされます。

PS-Monoへの移植とLinuxでの実行(IISに関連付けられているのに対して)の柔軟性が気に入っているため、セルフホストモードでのホスティングを継続したいと考えています。

4

2 に答える 2

1

このブログ投稿では、ServiceStack バックエンドで SignalR を使用する方法について説明します: SignalR、Filters、および ServiceStack

要約すると、ServiceStack Request の動作を Bufferered に変更する必要があります。

public HelloAppHost()
    : base("Hello Web Services", typeof(HelloService).Assembly)
{
    PreRequestFilters.Add((req,res) => req.UseBufferedStream = true);
}

次に、[IncomingHub]、[OutgoingHub] 属性を Get() や Post() などのサービス メソッドに追加できます。

ServiceStack での OWIN サポートについては、息を止めないでください。このスレッドは、現時点でサポートを追加する確固たる理由はないという主要なメンテナーの意見を示しています。

于 2014-10-23T01:08:35.783 に答える
0

SignalRは、OWINを使用して構築されたセルフホストオプションを提供します。

SignalRを適切に追加できない場合に備えて、ServiceStackにもまもなくOWINでホストされる実装が含まれることに気付きました。

次に、 Fireflyのようなものを使用して、1つのサーバー実装に縛られることなく、アプリの両方の部分を簡単にホストできます。

参考までに、セルフホストの起動コードを次に示します。

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;

namespace SignalR.Hosting.Self.Samples
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://localhost:8080";

            using (WebApplication.Start<Startup>(url))
            {
                Console.WriteLine("Server running on {0}", url);
                Console.ReadLine();
            }
        }
    }

    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapHubs();
        }
    }

    public class MyHub : Hub
    {
        public void Send(string message)
        {
            Clients.All.addMessage(message);
        }
    }
}
于 2013-01-27T22:54:53.863 に答える