Соединение с клиентом SignalR не установлено

Я создал приложение SignalR Selfhosted, но не могу получить к нему доступ через браузеры или Windows Phone (это мой клиент). Я следовал нескольким руководствам, и они в значительной степени говорят одно и то же, я считаю, что ошибка связана с моей конфигурацией сети, также обратите внимание, что при запуске проекта IIS не срабатывает (не уверен, что это также требуется).

Сервер Сигнала:

class Program : Hub
    {
        private static HubConnection Connection { get; set; }
        private static IHubProxy HubProxy { get; set; }

        const string Url = "http://*:8080";

        static void Main(string[] args)
        {
            // This will *ONLY* bind to localhost, if you want to bind to all addresses
            // use http://*:8080 to bind to all addresses. 
            // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
            // for more information.

            using (WebApp.Start(Url))
            {
                Console.WriteLine("Servidor rodando em {0}", Url);
                Console.ReadLine();
            }
        }

        private static void Connection_Closed()
        {
            Connection = null;
        }
    }

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

Ошибка:

Связь не установлена.

Мой клиентский класс:

public class SignalRService : PhoneApplicationPage
    {
        public String UserName { get; set; }

        public IHubProxy HubProxy { get; set; }

        private const string ServerURI = "http://localhost:8080";

        public HubConnection Connection { get; set; }

        public SignalRService()
        {
            UserName = "Luizaooo";

            ConnectAsync();
        }

        public void ObterAtualizacoesProdutos()
        {
            ProdutoService produtoService = new ProdutoService();
            var dataHora = produtoService.ObterDataHoraUltimaAtualizacao();
            HubProxy.Invoke("ObterAtualizacoes", dataHora);
            MessageBox.Show("passou");
        }

        private async void ConnectAsync()
        {
            Connection = new HubConnection(ServerURI);
            Connection.Closed += Connection_Closed;
            HubProxy = Connection.CreateHubProxy("ProdutoHub");

            HubProxy.On<List<Produto>>("AtualizarProdutos", (ListaDeProdutos) =>
                this.Dispatcher.BeginInvoke(() =>
                {
                    var a = ListaDeProdutos;
                }));

            try
            {
                await Connection.Start();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return;
            }
        }

        private void Connection_Closed()
        {
            Connection = null;
        }
    }

person Luiz Negrini    schedule 18.09.2015    source источник


Ответы (1)


Добиться правильного распознавания класса Startup может быть сложно, особенно в сценариях с самостоятельным размещением.

Для вашего кода сначала проверьте, действительно ли работает метод Configuration. Если это не так, добавьте

[assembly: OwinStartup(typeof(Program.Startup))]

над деклератором namespace, как описано здесь: Owin Startup Detection

Вы можете полностью обойти эту проблему, используя перегрузку WebApp.Start, которая принимает предикат:

 WebApp.Start(url, new Action<IAppBuilder>((app) =>
 {
     app.UseCors(CorsOptions.AllowAll);
     app.MapSignalR();
 }));

В любом случае проверьте подключение, перейдя по адресу http://localhost:8080/signalr/hubs . Если это покажет вам файл javascript signalR, вы будете знать, что ваш сервис запущен и работает.

person BradleyDotNET    schedule 18.09.2015
comment
Я запускаю проект Windows Phone, и эмулятор не может получить доступ к адресу ... localhost: 8080 или IP-адресу, установленному напрямую. однако при проверке URL-адреса, который говорил vc, он просит загрузить файл, должен быть JS, который вы говорили, браузер правильно отображает JS. Но к моему несчастью, у меня просто проблема с сетью и я не могу протестировать в реале. - person Luiz Negrini; 19.09.2015
comment
@LuizNegrini Возможно, вы захотите проверить манифест своих приложений, чтобы узнать, требуются ли вам сетевые разрешения для него. - person BradleyDotNET; 19.09.2015
comment
появление javascript в signalr/hubs не означает, что проект настроен на asp.net mvc? Потому что мой клиентский проект — windows phone silverlight. - person Luiz Negrini; 19.09.2015
comment
@LuizNegrini Появление javascript означает, что ваш сервер размещен правильно и прослушивает соединения. Он может использоваться веб-сайтом для создания прокси-сервера, но в остальном просто сообщает вам, что работает. К сожалению, я не вижу никакой очевидной причины, по которой ваш телефонный проект терпит неудачу. - person BradleyDotNET; 19.09.2015