2017-02-22 73 views
0

我尝试使用signalR添加web套接字功能,基于: chat example

我有2个不同项目 - 1:是纯服务器,包括网页API: 我有一个Web方法来获得请求,并调用到轮毂:

[HttpGet] 
    [Route("api/GetData")] 
    public IHttpActionResult GetCorpDataApi() 
    { 
     return Ok(getResponse()); 
     **startWebSocket();** 
    } 

开始web套接字方法来电:

private void startWebSocket() 
    { 
     MonitorHub hub = new MonitorHub(); 
     Timer myTimer = new Timer(); 
     myTimer.Elapsed += new ElapsedEventHandler(hub.DisplayTimeEvent); 
     myTimer.Interval = 3000; 
     myTimer.Start(); 
    } 

调用在我中心的方法:

public class MonitorHub : Hub 
{ 

    public void DisplayTimeEvent(object source, ElapsedEventArgs e) 
    { 
     var response = MonitorUtils.GetCorpData(); 
     Clients.All.broadcastMessage(response); 
    } 

} 

(全部在同一个项目中,没有错误编译)。

我的客户端代码位于客户端的角度项目(也下VS), 我加在控制器内所要求的功能:

function initWebSocket() { 
      self.chatHub = null; // holds the reference to hub 
      self.chatHub = $.connection.MonitorHub; // **I dont have MonitorHub** 
      $.connection.hub.start(); 
      self.chatHub.client.broadcastMessage = function (response) { 
       //bla bla 
      };    
     } 

我想提一下,我包括在index.html中的文件:

<script src="scripts/Vendor/jquery/jquery-2.2.1.js"></script>                
<script src="scripts/Vendor/jquery/jquery.signalR-2.2.1.js"></script> 
<script src="scripts/signalr/hubs"></script> 
<script src="assets/global/plugins/angularjs/angular.min.js" type="text/javascript"></script> 

$ .connection.MonitorHub获取任何东西 - 未定义。

我确实认为它与服务器端 与客户端不同的项目有关。当我运行聊天示例这样的简单示例时,它可以工作 - 全部在同一个项目中。

我在控制台中得到这个错误: 错误:SignalR:加载集线器时出错。确保您的集线器参考是正确的,例如。

任何想法?

回答

0

我不是100%确定,但可能是JQuery版本不匹配的情况。尝试使用较低的jQuery版本,例如jquery-1.6.4.js

+0

谢谢,但事实并非如此。 我仍然在控制台中得到错误: 错误:SignalR:加载集线器时出错。确保您的集线器参考是正确的,例如。 – moshi

+0

好的。检查您是否与js文件有任何资源路径不匹配问题。 – Tushar

+0

我没有看到(当我检查与f12)任何信号/集线器文件夹... – moshi

0

您似乎没有将SignalR服务器添加到您的项目中。您似乎正在启动一个WebSocket并创建一个集线器实例并抛出一些Web API。这不是SignalR的工作原理。您需要将SignalR服务器软件包安装到您的服务器上,然后SignalR将负责处理您的呼叫,实例化您的集线器等。只需按照您发布链接的教程(设置项目部分)或this one

+0

嗨帕维尔,感谢您的回复。 我去了通过我添加的帖子,我添加了SignalR到服务器端 使用nuget 服务器正在运行和初始化良好 顺便说一句我有一个工作eaxmple其中客户端和服务器在同一个项目 这里差异 谢谢! – moshi

+0

如果你的javascript来自与运行SignalR的服务器不同的服务器,那么你需要启用CORS。[H(服务器是在一个项目中,客户端在另一个项目中) (https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client)是一个教程,他们在其中执行类似的操作 - signalR服务器是自托管的,但包含javascript文件的html是从单独的服务器提供的。 – Pawel