2017-02-22 36 views
0

Я пытаюсь добавить функциональность веб-сокета, используя signalR, на основе: chat example.

У меня есть 2 разных проекта - 1: чистый сервер, включает в себя веб-интерфейс API: У меня есть веб-метод, чтобы получить запрос и позвонить в ступице:

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

начало метода веб-сокет звонки:

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) любую папку signalr/hubs ... – moshi

0

Вы, похоже, не добавили сервер SignalR в свой проект. Кажется, вы запускаете WebSocket и создаете экземпляр концентратора и бросаете некоторый веб-API. Это не работает SignalR. Вам необходимо установить пакеты сервера SignalR на ваш сервер, а затем SignalR позаботится о том, чтобы обрабатывать ваши звонки, создавать экземпляры ваших концентраторов и т. Д. Просто следуйте руководству, в котором вы разместили ссылку (Настройка проекта) или this one.

+0

Привет, Pawel, спасибо за ваш ответ. Я пошел через добавленную мной почту, и я добавил SignalR на серверную сторону с помощью nuget. Сервер работает и инициализируется хорошо. BTW У меня есть рабочий eaxmple, в котором клиент и сервер находятся в одном проекте. Здесь разница что сервер находится в одном проекте, а клиент - в другом. Любая другая идея? Спасибо! – moshi

+0

Если ваш javascript приходит с другого сервера, чем тот, на котором работает SignalR, вам нужно включить CORS. [H ere] (https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client) - это учебник, в котором они делают нечто похожее - Сервер signalR сам по себе, но html, содержащий файлы javascript, подается с отдельного сервера. – Pawel