2015-12-01 3 views
0

Я пытаюсь отправить сообщение из консольного приложения в приложение MVC с помощью SignalR, Ниже приводится код:Отправить сообщение с консоли на веб-страницы с помощью SignalR

static void Main(string[] args) 
    { 

     string url = "http://localhost:8080"; 
     string line=null; 
     MyHub obj = new MyHub(); 

     using (WebApp.Start(url)) 
     { 
      Console.WriteLine("Server running on {0}", url); 
      Console.ReadLine(); 

      Console.WriteLine("Enter your message:"); 
      line = Console.ReadLine(); 
      obj.Send(line); 

     } 

    } 
} 
class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.UseCors(CorsOptions.AllowAll); 
     app.MapSignalR(); 
    } 
} 
public class MyHub : Hub 
{ 
    public void Send(string message) 
    { 
     Clients.All.addMessage(message); 
    } 
} 

и вот как IAM пытается получить сообщение на сайте:

<script type="text/javascript"> 
    $(function() { 
     //Set the hubs URL for the connection 
     $.connection.hub.url = "http://localhost:8080/signalr"; 

     // Declare a proxy to reference the hub. 
     var chat = $.connection.myHub; 

     // Create a function that the hub can call to broadcast messages. 
     chat.client.addMessage = function (message) { 
      // Html encode display name and message. 
      //var encodedName = $('<div />').text(name).html(); 
      var encodedMsg = $('<div />').text(message).html(); 
      // Add the message to the page. 
      $('#discussion').append('<li><strong>' 
       + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>'); 
     }; 
     // Get the user name and store it to prepend to messages. 
     //$('#displayname').val(prompt('Enter your name:', '')); 
     // Set initial focus to message input box. 
     //$('#message').focus(); 
     // Start the connection. 


    }); 
</script> 

дело в том, что РМКО получаю следующее исключение:

Exception

Похоже, что я не могу непосредственно создать объект класса Myhub, любую идею о том, как исправить это, помните, что мне нужно отправить сообщение с консоли на веб-страницу. Любые рекомендации ???

+0

Вы видели этот пост: http://stackoverflow.com/questions/11140164/signalr-console-app-example? –

+0

@DavidTansey na Позвольте мне проверить это – moji

+0

это donthelp so much – moji

ответ

1

С SignalR вы не создаете экземпляр классов концентратора, а SignalR делает это и не обязательно будет использовать один и тот же экземпляр концентратора дважды. Никогда не сохраняйте данные состояния в самом классе концентратора.

SignalR использует контекст концентратора для отслеживания клиентов и позволяет вам взаимодействовать с ними. Вам нужно получить этот контекст из библиотеки SignalR, прежде чем вы сможете отправить информацию и т. Д. IHubContext дает вам Clients и Groups членов, которые вы используете в хабе, что позволяет делать то же самое, что и в хабе.

Попробуйте это:

static void Main(string[] args) 
{ 
    string url = "http://localhost:8080"; 
    using (WebApp.Start(url)) 
    { 
     Console.WriteLine("Server running on {0}", url); 

     // get text to send 
     Console.WriteLine("Enter your message:"); 
     string line = Console.ReadLine(); 

     // Get hub context 
     IHubContext ctx = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); 

     // call addMessage on all clients of context 
     ctx.Clients.All.addMessage(line); 

     // pause to allow clients to receive 
     Console.ReadLine(); 
    } 
} 
+0

в этой строке '// вызов addMessage для всех клиентов контекста ctx.Clients.All.addMessage (message);' вы имеете в виду строку вместо сообщения? – moji

+0

На самом деле не имеет значения, что вы называете переменной ... – Amy

+0

@moji Да, мой тестовый код не использовал ваши имена переменных. Извините, обновлено. – Corey