2015-10-07 4 views
1

Сценарий

Я пытаюсь использовать linqpad для самостоятельного подключения SignalR.Самостоятельный хостинг SignalR в linqpad

Script

// I have uploaded to instant share here: http://share.linqpad.net/578ol2.linq 

// Import the following nuget packages: 
// Microsoft.AspNet.SignalR.SelfHost 
// Microsoft.Owin.Cors 

#define NONEST 

void Main() 
{ 
    var baseUrl = @"http://localhost:8080/"; 

    using (WebApp.Start<Startup>(baseUrl)) 
    { 
     Process.Start(baseUrl + "index.html"); 

     Console.WriteLine("Server running at " + baseUrl); 
     Console.ReadLine(); 
    } 
} 

public class Startup 
{ 
    public readonly string Html = @" 
<!DOCTYPE html> 
<html> 
<head> 
    <title>SignalR Simple Chat</title> 
</head> 
<body> 
    <div class='container'> 
     <input type='text' id='message' /> 
     <input type='button' id='sendmessage' value='Send' /> 
     <input type='hidden' id='displayname' /> 
     <ul id='discussion'></ul> 
    </div> 
    <script src='https://code.jquery.com/jquery-1.6.4.js'></script> 
    <script src='http://ajax.aspnetcdn.com/ajax/signalr/jquery.signalr-2.2.0.js'></script> 
    <script src='http://localhost:8080/signalr/hubs'></script> 

    <script type='text/javascript'> 
     $(function() { 
      $.connection.hub.url = 'http://localhost:8080/signalr'; 
      $.connection.hub.logging = true; 

      var chat = $.connection.myHub; 

      chat.client.addMessage = function (name, message) { 
       var encodedName = $('<div />').text(name).html(); 
       var encodedMsg = $('<div />').text(message).html(); 

       $('#discussion').append('<li><strong>' + encodedName + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>'); 
      }; 

      $('#displayname').val(prompt('Enter your name:', '')); 
      $('#message').focus(); 

      $.connection.hub.start().done(function() { 
       $('#sendmessage').click(function() { 
        chat.server.send($('#displayname').val(), $('#message').val()); 
        $('#message').val('').focus(); 
       }); 
      }); 
     }); 
    </script> 
</body> 
</html> 
".Trim(); 

    public void Configuration(IAppBuilder app) 
    { 
     app.UseCors(CorsOptions.AllowAll); 
     app.MapSignalR(); 

     app.Map("/index.html", config => 
     { 
      config.Run(context => 
      { 
       context.Response.ContentType = "text/html"; 
       return context.Response.WriteAsync(Html); 
      }); 
     }); 
    } 
} 

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

Результат

Если посмотреть на консоли браузера вы видите, что в конечном итоге SignalR исчерпывает все транспорты, поэтому не может создать соединение между клиентом и сервером

SignalR: Client subscribed to hub 'myhub'. 
Negotiating with 'http://localhost:8080/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D'. 
serverSentEvents transport starting. 
Attempting to connect to SSE endpoint 'http://localhost:8080/signalr/connect?transport=serverSentEvents&clientProt…joHW8a9m5Q%3D%3D&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&tid=1'. 
EventSource connected. 
serverSentEvents transport timed out when trying to connect. 
EventSource calling close(). 
serverSentEvents transport failed to connect. Attempting to fall back. 
foreverFrame transport starting. 
Forever Frame is not supported by SignalR on browsers with SSE support. 
foreverFrame transport failed to connect. Attempting to fall back. 
longPolling transport starting. 
Opening long polling request to 'http://localhost:8080/signalr/connect?transport=longPolling&clientProtocol=…QeRv75joHW8a9m5Q%3D%3D&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D'. 
longPolling transport timed out when trying to connect. 
Aborted xhr request. 
longPolling transport failed to connect. Attempting to fall back. 
Fallback transports exhausted. 
Stopping connection. 
Fired ajax abort async = true. 

Однако этот же точный код работает без проблем в консольном приложении

Вопрос

Кто-нибудь знает, почему этот код не при размещении в LINQPad, но работает при размещении в консольном приложении?

+0

Какая у вас версия LinqPad? –

+0

Я использую Linqpad 5 – kimsagro

ответ

0

Я склоняюсь к какой-то проблеме с подключением, а не к LinqPad, так как я могу запустить ваш код без каких-либо проблем. Я также запускаю его под версией 5. Есть ли у вас брандмауэр 3r?

Просто чтобы подтвердить, каково ожидаемое поведение? Когда я запускаю его, мой браузер появляется, прося меня ввести имя. Затем я могу отправить «сообщения», которые появляются на странице под текстовым полем.

+0

Просто проверяю его снова и, похоже, сейчас работает .. спасибо за вашу помощь – kimsagro

Смежные вопросы