Клиент SignalR подключается к другому серверу - PullRequest
0 голосов
/ 18 мая 2019

Я использую SignalR версии 2.x в моем приложении ASP.Net MVC и имеет ту же версию сигнализатора в моем угловом клиентском приложении.Приложение Asp.net MVC размещено в http://localhost:42080, а угловое приложение размещено в http://localhost:4200.Я установил Microsoft.AspNet.SignalR и включил Cors в приложении MVC.

[HubName("msg")]
public class MessageHub : Hub
{
    public void Send(string user, string message)
    {
        Clients.User(user).Send(user, message);
    }
}

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

const connection = $.hubConnection(this.config.AdminUrl); // http://localhost:42080
const chat = connection.createHubProxy('msg'); // chat.server or chat.client are undefined

Я также попытался:

$.connection.hub.url = 'http://localhost:42080/signalr';
var hub = $.connection.msg; // hub = undefined
$.connection.hub.start() // this will result Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/js'></script>

как я могуподключиться к серверу передачи сигналов, расположенному на другом сервере?

1 Ответ

0 голосов
/ 18 мая 2019

Вам нужно настроить свой Startup.cs следующим образом

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Branch the pipeline here for requests that start with "/signalr"
            app.Map("/signalr", map =>
            {
                // Setup the CORS middleware to run before SignalR.
                // By default this will allow all origins. You can 
                // configure the set of origins and/or http verbs by
                // providing a cors options with a different policy.
                map.UseCors(CorsOptions.AllowAll);
                var hubConfiguration = new HubConfiguration 
                {
                    // You can enable JSONP by uncommenting line below.
                    // JSONP requests are insecure but some older browsers (and some
                    // versions of IE) require JSONP to work cross domain
                    // EnableJSONP = true
                };
                // Run the SignalR pipeline. We're not using MapSignalR
                // since this branch already runs under the "/signalr"
                // path.
                map.RunSignalR(hubConfiguration);
            });
        }
    }

Примечание

Не устанавливайте для jQuery.support.cors значение true в вашем коде.

Не устанавливайте для jQuery.support.cors значение true

SignalR обрабатывает использование CORS. Установка jQuery.support.cors в true отключает JSONP, потому что это заставляет SignalR принимать браузер поддерживает CORS.

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

JavaScript

$.connection.hub.url = '<yourbackendurl>;

Примечание

Обычно вы регистрируете обработчики событий перед вызовом метода start установить соединение.

Деталь можно найти здесь

...