2017-02-18 17 views
3

У меня было веб-приложение с главной страницей, и мне нужно показать предупреждение всем подключенным пользователям моего приложения. Я использовал класс запуска Owin и преобразованного сигнала RВызов метода SignalR Hub из кода позади

Затем создал концентратор, как показано ниже

namespace ArtWebApp 
{ 
    [HubName("artHub")] 
    public class ArtWebHub : Hub 
    { 

     public void Hello() 
     { 
      Clients.All.hello(); 
     } 


     public void SayMessage() 
     { 
      this.Clients.All.showmessage(); 

     } 
    } 
} 

Тогда в MasterPage я добавил Javascript ниже

<script src="Scripts/jquery-1.6.4.js"></script> 
    <script src="Scripts/jquery.signalR-2.2.1.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      debugger; 
      var connection = $.hubConnection("") 
      var hub = connection.createHubProxy('artHub'); 
      hub.on('showmessage', function() { 

       alert('Hi'); 
      }); 


      connection.start().done(); 
      //connection.start(function() { 

      // hub.invoke('SayMessage'); 
      //}); 
     }); 

    </script> 

Это прекрасно работает, когда метод Hub вызывается с той же страницы, но когда я попытался вызвать метод от нажатия кнопки на странице, его не работает

protected void Button1_Click(object sender, EventArgs e) 
    {   var hubContext = GlobalHost.ConnectionManager.GetHubContext<ArtWebApp.ArtWebHub>(); 
     hubContext.Clients.All.SayMessage();  
    } 

Может кто-нибудь предложить мне вопрос

ответ

4

То, что я вижу из вашего кода, является ошибкой в ​​функции на стороне клиента, которую вы вызываете.

Clients.All обычно позволяет вызывать функцию вы определили на стороне клиента по телефону Clients.All.functionName()

В Button1_Click случае измените

hubContext.Clients.All.SayMessage(); 

Для

hubContext.Clients.All.showMessage(); 

Это потому, что вы используют коллекцию dynamicClients

Вы пытаетесь вызвать функцию на стороне клиента (которая не существует).

Метод SayMessage, который вы пытаетесь вызвать, является членом класса ArtWebHub и не может быть вызван вызовом hubContext.Clients.All.

Вы можете вызвать SayMessage от клиента с помощью hub.invoke('SayMessage'), но для вызова функции showmessage, определенной в клиенте вы должны ссылаться на него по-другому с сервера, потому что SayMessage не доступна для hubContext

+0

Спасибо за ответ .the проблема решена, и Signalr работает почти на всех страницах с главной страницы. Но на некоторых страницах я получаю сообщение об ошибке «Объект не поддерживает свойство или метод hubconnection», вы можете мне что-нибудь предложить –

+0

@SreenathGanga Обязательно проверьте, что вы загрузили клиентскую библиотеку SignalR на этих страницах. Обычно это проблема, когда вы получаете эту ошибку. – scartag

+0

Я определил его на главной странице с абсолютным url