如果Hub在不同的SignalR项目中,如何连接Hub



我正在处理SignalR项目,我想在WebApi项目和Web项目中使用Hub。所以我创建了一个类库项目,并在那里实现了Hub。

我的项目结构看起来像:

-ChatHub
-Hub
-Webapi
-Website 

这是我的集线器:

[HubName("chathub")]
public class ChatHub : Hub
{
public override Task OnConnected()
{
return base.OnConnected();
}
public override Task OnReconnected()
{
return base.OnReconnected();
}   
}

当我在我的网站上打电话给Hub时,它运行得很好。

<script src="~/signalr/hubs"></script>
var chatHub = $.connection.chathub; 

以下是我如何从外部连接集线器(Android):

mHubConnection = new HubConnection(http://{IpAddress}/ChatApp/);
mHubProxy = mHubConnection.createHubProxy(chathub);

API:

public IHttpActionResult LoginUser([FromBody]LoginModel model)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();   
//chatUser logic here
hubContext.Clients.Client(chatUser.ConnectionId).receiver(response);
}

但它给了我一个错误:

java.util.courrent.ExecutionException:microsoft.aspx net.signalr.client.transport.NegotiationException:存在在与服务器的协商中出现问题10-13 18:15:54.074 18686-18686/com.chaapp.android W/系统错误:原因:microsoft.aspx net.signalr.client http.InvalidHttpStatusCode异常:无效状态代码:404

如果我的集线器在API项目之外,我们如何连接集线器?

我已经完成了WebApi和MVC项目之间的SignalR集线器共享,但没有得到他们提供的答案。

在设置到集线器的连接和代理后,是否调用mHubConnection.Start()?此外,传入HubConnection构造函数的url是否是集线器的正确位置?如果你还没有浏览过,这里有几个链接可能会有所帮助:从.NET客户端访问集线器,配置信号器url

最新更新