我想向网页发送通知,这是一个客户WebAPI
。
所以,我有2个解决方案,Asp.Net MVC
应用程序和WebAPI
应用程序。我已向两者添加了SignalR
nuget
。 WebAPI
部分包含以下代码:
public class ProgressHub : Hub
{
public void Notification(string message)
{
Clients.Caller.onProgressNotification(message);
}
}
private void SendMessage(string message)
{
var context = Microsoft.AspNet.SignalR
.GlobalHost.ConnectionManager.GetHubContext<Hubs.ProgressHub>();
context.Clients.All.onProgressNotification(message);
}
然后从我的控制器中调用它:
public async Task<IHttpActionResult> ZonalPost()
{
SendMessage("Start");
// my long operation
SendMessage("Scan complete");
// my long operation
SendMessage("Convert complete");
// my long operation
在我的网络应用程序(客户端部分)中:
<script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
$(function () {
var progress = $.connection.progressHub;
progress.client.onProgressNotification = function (message) {
console.log(message);
};
});
但我收到了错误
430 Uncaught TypeError:无法读取未定义的属性“client”
为什么以及如何解决?
答案 0 :(得分:0)
您可能需要使用以下内容:
$(function () {
$.connection.hub.url = '<yourbackendurl>';
var connection = $.hubConnection();
var progress = connection.createHubProxy('progressHub');
progress.on('onProgressNotification', function(message) {
console.log(message);
});
connection.start()
.done(function(){ console.log('Now connected, connection ID=' + connection.id); })
.fail(function(){ console.log('Could not connect'); });
});
请参阅using SignalR without the generated proxy上的文档。请注意,如果要连接到其他服务器,还需要指定服务器URL。