我正在使用SignalR项目,我想在WebApi项目中使用Hub以及Web项目。所以我创建了一个类库项目并在那里实现了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;
以下是我如何从外部连接Hub(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.concurrent.ExecutionException: microsoft.aspnet.signalr.client.transport.NegotiationException:那里 是与服务器协商的问题 10-13 18:15:54.074 18686-18686 / com.chatapp.android W / System.err: 引起: microsoft.aspnet.signalr.client.http.InvalidHttpStatusCodeException: 无效的状态代码:404
如果我的Hub不在API项目中,我们如何连接Hub?
我已经完成了Sharing a SignalR hub between a WebApi and MVC project,但没有得到他们提供的答案。
答案 0 :(得分:2)
在设置连接和集线器代理后,您是否正在调用mHubConnection.Start()?也是将URL传递到HubConnection构造函数中的正确位置?以下是一些可能有用的链接,如果您尚未通过它们:Access hub from .NET client,configure signalr url