2017-06-04 36 views
1

我想发送通知给网页,这是一个客户端WebAPI。 因此,我有2个解决方案,Asp.Net MVC应用程序和WebAPI应用程序。我已将SignalRnuget添加到两者。 WebAPI部分具有下面的代码:SignalR和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 

在我的web应用程序(客户端部分):

<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: Cannot read property 'client' of undefined

为什么以及如何解决?

+1

尝试添加'[HubName(“progressHub”)]'到您的集线器 –

+0

它如何解决客户端部分的问题? –

+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。