servicestack,Web,Webserver,Signalr,servicestack" /> servicestack,Web,Webserver,Signalr,servicestack" />

Web 在服务堆栈RESTAPI服务中使用信号器

Web 在服务堆栈RESTAPI服务中使用信号器,web,webserver,signalr,servicestack,Web,Webserver,Signalr,servicestack,是否可以在服务堆栈项目中使用信号器?我们目前正在为RESTWebAPI使用服务堆栈。我们对它的体系结构、灵活性等总体上感到满意。现在我们正在探索使用事件驱动或推送技术(vs轮询状态)与呼叫客户进行通信的方法。我应该注意到,我们目前使用AppHostHttpListenerBase(vs在IIS中托管)在windows服务中托管API 是否有可能配置一条专用的路由,以某种方式传递到信号中心,这样这两条路由就可以共存?e、 g.http://localhost:8000/api/live/jobs/

是否可以在服务堆栈项目中使用信号器?我们目前正在为RESTWebAPI使用服务堆栈。我们对它的体系结构、灵活性等总体上感到满意。现在我们正在探索使用事件驱动或推送技术(vs轮询状态)与呼叫客户进行通信的方法。我应该注意到,我们目前使用AppHostHttpListenerBase(vs在IIS中托管)在windows服务中托管API

是否有可能配置一条专用的路由,以某种方式传递到信号中心,这样这两条路由就可以共存?e、 g.
http://localhost:8000/api/live/jobs/jobid
将命中信号机代码,但
http://localhost:8000/api/jobs/jobid
将路由到当前基于DTO的服务堆栈代码

PS-我们希望继续以自主机模式托管,因为我们喜欢移植到Mono并在Linux上运行的灵活性(而不是绑定到IIS)。

Signal提供了一个使用OWIN构建的选项

我注意到,如果您无法在适当的位置添加信号器,服务堆栈将被删除

然后,您可以使用类似的工具轻松托管应用程序的两个部分,而无需将自己绑定到任何一个服务器实现

以下是自主机启动代码,以供参考:

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);
        }
    }
}
使用系统;
使用Microsoft.AspNet.signal;
使用Microsoft.Owin.Hosting;
使用Owin;
命名空间SignalR.Hosting.Self.Samples
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串url=”http://localhost:8080";
使用(WebApplication.Start(url))
{
WriteLine(“在{0}上运行的服务器”,url);
Console.ReadLine();
}
}
}
类启动
{
公共无效配置(IAppBuilder应用程序)
{
app.MapHubs();
}
}
公共类MyHub:Hub
{
公共无效发送(字符串消息)
{
Clients.All.addMessage(message);
}
}
}

这篇博客文章介绍了如何将信号器与ServiceStack后端一起使用:

总之,您必须将ServiceStack请求行为更改为Buffered

public HelloAppHost()
    : base("Hello Web Services", typeof(HelloService).Assembly)
{
    PreRequestFilters.Add((req,res) => req.UseBufferedStream = true);
}
然后您可以向服务方法添加[IncomingHub]、[OutgoingHub]属性,如Get()和Post()等


至于ServiceStack中的OWIN支持,请不要屏息以待。显示了主要维护人员的观点,即此时没有足够的理由添加支持

我刚刚遇到了这个问题——你有没有找到解决办法?