我的解决方案中有两个项目。
1)mvc项目
2)实现signalR和WebAPI的webapi。 (" http://localhost:8895/signalr/hubs/&#34)
在MVC项目的index.cshtml中我有代码
var baseUrl = "http://localhost:8895/api/webApi/";
var userName = "guest" + getRandom();
$.connection.hub.url = "http://localhost:8895/signalr/hubs/";
var chat = $.connection.chatHub;
$.connection.hub.start().done(function () {
Init();
});
//init
function Init() {
var req = {
method: 'POST',
url: baseUrl + 'Init?username=' + userName + '&connectionId=' + $.connection.hub.id,
}
$http(req)
.success(function () {
})
.error(function (e) {
});
}
// Create a function that the hub can call to send welcome message to current connection only.
chat.client.hello = function (clientName) {
alert(ClientName + " said hello");
};
和第二个项目
public class webApiController : ApiWithHubController<chatHub>
{
[HttpPost]
public void chatIntialization(string username, string connectionId)
{
chatHub.Hello(username, connectionId);
}
}
和ChatHub.cs
public class chatHub : Hub
{
public static void Hello(string clientName, string connectionId)
{
var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
IClientProxy proxy = context.Clients.Client(connectionId);
proxy.Invoke("Hello", clientName);
}
}
运行正常,但现在我要做的是,如果有任何用户断开连接,我需要提醒连接的用户。我无法这样做。
我尝试了什么。
在chathub.cs
public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
{
var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
IClientProxy proxy = context.Clients.All;
// proxy.Invoke("t", "man down");
return base.OnDisconnected(stopCalled);
//return Clients.All.t("man down");
}
和index.html
chat.client.disconnect(function (msg) {
alert(msg);
})
编辑:
或者如果我取消注释我的行
// proxy.Invoke("t", "man down");
我按如下方式更改了
chat.client.t(function (msg) {
alert(msg);
})
但是我无法解除断开事件。