使用来自多个WebAPI项目的SignalR发送更新

时间:2015-08-07 14:07:11

标签: asp.net-web-api signalr

目前我有一个MVC项目和2个WebAPI项目。

是否可以订阅从多个WebAPI项目发布的事件?我有这个设置,但我不确定这种方法是否正确。我只是使用http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc中的示例 - 我实际上没有实现聊天室,只是研究可能的内容。

当发生这种情况时,我似乎也得到了一个404 @ Scripts.Render("〜/ webapib / signalr / hubs)

网址重写规则:

Project - URL               - Rewrite Url
WebAPIa - localhost/api     - http://localhost:81/{R:1}
WebAPIb - localhost/webapib - http://localhost:82/{R:1}

在_Layout中:

@Scripts.Render("~/Scripts/jQuery/jquery.signalR-2.0.3.js")
@Scripts.Render("~/api/signalr/hubs)
@Scripts.Render("~/webapib/signalr/hubs)

<script type="text/javascript">
    $(function () {
        // Declare a proxy to reference the hub.
        var chat = $.connection.chatHub;

        // Create a function that the hub can call to broadcast messages.
        chat.client.broadcastMessage = function (name, message) {
            // do stuff
        };

        // define another hub connection here for 2nd WebAPI?
    });
</script>

在两个WebAPI项目中,每个项目都有自己的控制器和测试方法:

[HttpGet]
public void PublishTest(int _id)
{
    var clients = GlobalHost.ConnectionManager.GetHubContext<ChatHub>().Clients;
    clients.All.broadcastMessage("name", "message");
}

在两个WebAPI项目中,每个项目都有自己的OWIN启动类,如下所示:

[assembly: OwinStartup(typeof(WebAPIa))]
namespace Random.Example.WebAPIa
{
    public class Startup
    {
        public void Configuration(IAppBuilder _app)
        {
            _app.MapSignalR("/api/signalr", new HubConfiguration());
        }
    }
}

[assembly: OwinStartup(typeof(WebAPIb))]
namespace Random.Example.WebAPIb
{
    public class Startup
    {
        public void Configuration(IAppBuilder _app)
        {
            _app.MapSignalR("/signalr", new HubConfiguration());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我肯定会尝试在js文件中添加第二个连接到第二个服务器。请记住,因为MVC项目和两个WebAPI服务器位于不同的端口上,您必须启用CORS支持(为NuGet安装CORS包并在Startup.cs个文件上启用跨域调用。

看一下这个答案 - How to send message in cross domain using signalr

祝你好运!