Консольное серверное приложение SignalR 1.0alpha2

Я играю с новой версией signalR 1.0alpha2. Я хочу реализовать сервер SignalR вне приложения ASP.NET. Чтобы два консольных приложения могли общаться друг с другом.

Со старой версией 0.5.3 я смог «Установить пакет SignalR.Hosting.Self», чтобы:

var server = new Server("http://127.0.0.1:8088/");

Но в новой версии 1.0alpha2 я не могу установить этот пакет NuGet...

Может ли кто-нибудь дать мне ссылку или, может быть, рабочий мини-пример двух консольных приложений, основанных на выпуске 1.0alpha2. (Я могу найти только неработающие старые примеры 0.5.3...).


Ok. так что я следовал вашим инструкциям. Сейчас:

Моя клиентская консоль:

class Programm 
{
  static void Main(string[] args) 
  {
    var connection = new HubConnection("http://localhost/");
    IHubProxy myHub = connection.CreateHubProxy("MyHub");
    connection.Start().ContinueWith(task =>
      {
          if (task.IsFaulted)
              Console.WriteLine("No Connection: " + task.Exception.GetBaseException());
          else
              Console.WriteLine("Connected!");
      });

    myHub.Invoke("Send");

    Console.ReadLine(); // wait...
  }
}

А вот моя серверная консоль:

class Program : Hub
{
  static void Main(string[] args)
  {
      Console.ReadKey();
  }
  public void Send(string message)
  {
      Debug.WriteLine("Server Method [send] was called");
      Console.WriteLine("Server Method [send] was called");
  }
}

Но это ерунда, я думаю...


person Sascha Void    schedule 22.11.2012    source источник


Ответы (1)


Вам нужно использовать новый пакет NuGet, так как SignalR стал официальным: (говорит ASP, но он также используется в приложениях .NET)

Install-Package Microsoft.AspNet.SignalR -pre Сервер

Install-Package -pre Microsoft.AspNet.SignalR.Client Клиент

Здесь также есть готовый пример приложения, к которому вы можете затем подключить свое консольное приложение для некоторого тестирования:

Install-Package Microsoft.AspNet.SignalR.Sample

Использование клиентов; подключение двух консольных приложений, одно из которых должно быть размещено на концентраторе, а другое должно использовать клиентское соединение, указывающее на хост.

Вся необходимая информация находится в этой клиентской вики: ссылка


ИЗМЕНИТЬ

Сервер: (с использованием собственного хоста)

class Program
{
    static void Main(string[] args)
    {
        string url = "http://localhost:8081/";
        var server = new Server(url);

        // Map the default hub url (/signalr)
        server.MapHubs();

        // Start the server
        server.Start();

        Console.WriteLine("Server running on {0}", url);

        // Keep going until somebody hits 'x'
        while (true)
        {
            ConsoleKeyInfo ki = Console.ReadKey(true);
            if (ki.Key == ConsoleKey.X)
            {
                break;
            }
        }
    }

    public class MyHub : Hub
    {
        public void Send(string message)
        {
            Clients.All.addMessage(message);

        }
    }

}

Клиент:

class Program
{
    static void Main(string[] args)
    {
        var connection = new HubConnection("http://localhost:8081/");

        IHubProxy proxy = connection.CreateHubProxy("MyHub");

        connection.Start().Wait();

        proxy.On("addMessage", data => { Console.WriteLine("From Server: " + data); });

        while (true)
        {
            proxy.Invoke("Send", Console.ReadLine());
        }

    }
}

введите здесь описание изображения

PS. Я добавлю загрузки к обоим решениям в комментариях ниже. Я уверен, что ты будешь в порядке.

person cillierscharl    schedule 22.11.2012
comment
Спасибо, я отредактировал свой первый пост с моим новым кодом. Но, кажется, я не понял, как это сделать... - person Sascha Void; 22.11.2012
comment
@SaschaVoid - собираю образец... дай мне несколько минут - person cillierscharl; 22.11.2012
comment
Привет, f0x: Спасибо за образец. Но моя проблема в том, что у меня нет класса сервера. Я не могу использовать var server = new Server(url); - person Sascha Void; 22.11.2012
comment
@SaschaVoid Вам нужна дополнительная ссылка. Обещанные решения: dl.dropbox. com/u/67200967/ - person cillierscharl; 22.11.2012
comment
Ах! Вы имеете в виду Microsoft.AspNet.SignalR.Hosting.Self.dll. Не подскажете, как получить эту сборку? Я несколько раз пытался установить его через Install-Package, но это не сработало. Я скопировал сборку из вашего рабочего проекта в свой, но все та же запутанная проблема. Но ваше решение работает. Вечером попробую, большое спасибо за помощь! - person Sascha Void; 22.11.2012
comment
@SaschaVoid это единственный способ получить его на данный момент, создав исходный код. рад, что это работает, пожалуйста, отметьте ответ на вопрос вверху! Спасибо! - person cillierscharl; 22.11.2012
comment
@SaschaVoid - я столкнулся с той же проблемой. Мне сказали, что они переделывают селф-хостинг для релиза, а пока можно получить Microsoft.AspNet.SignalR.Hosting.Self.dll, самостоятельно собрав исходники. Основным недостатком этого является то, что затем мне нужно было заменить все ссылки на библиотеки DLL из NuGet, поскольку им, похоже, нужна одна и та же версия DLL на протяжении всего решения. - person Ken Smith; 22.11.2012
comment
Да, ты прав. Я также заменил все сборки NuGet на сборку от f0x, и теперь она работает. @f0x: Спасибо! Я отметил твой ответ как правильный - person Sascha Void; 22.11.2012
comment
@SaschaVoid ура! удачи! следите за тем, когда self host и owin сольются в будущем. - person cillierscharl; 22.11.2012
comment
@f0x да, теперь я слежу за Дэвидом Фаулером в Твиттере, чтобы узнавать последние новости о SignalR. - person Sascha Void; 22.11.2012