2014-08-27 4 views
5

У меня есть приложение API и веб-приложение (для простоты на том же сервере - я буду делать материал CORS позже).SignalR - всегда понижен до отправленных сервером событий в Chrome/Firefox

  • Windows Server 2012 с IIS 8.5
  • WebSockets, установленные через "Программы и компоненты"
  • Firewall выключен

АНИ использует Owin + signalr и имеет правильную инициализацию (обрезается его вниз, чтобы найти ошибку):

public void Configuration(IAppBuilder app) 
{ 
    GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromSeconds(5); 
    app.MapSignalR(); 
    app.UseWebApi(Startup.CreateConfiguration()); 
} 

private static HttpConfiguration CreateConfiguration() 
{ 
    HttpConfiguration configuration = new HttpConfiguration(); 
    configuration.MapHttpAttributeRoutes(); 
    return configuration; 
} 

Все работает отлично, кроме connec к фактическим веб-гнездам. Каждый раз, когда клиент пытается установить соединение, происходит тайм-аут, и он переходит на SSE (или навсегда кадр/длительный опрос в IE). Я увеличил тайм-аут до 25 секунд, и те же симптомы возникают.

На клиенте, я постоянно получаю эту ошибку с протоколированием включено:

SignalR: Connecting to websocket endpoint 'ws://[myurl]'. 
SignalR: Websocket opened. 
SignalR: **webSockets timed out when trying to connect.** 
SignalR: Closing the Websocket. 
SignalR: Attempting to connect to SSE endpoint 'http://[myurl]'. 
SignalR: EventSource connected. 
SignalR: serverSentEvents transport selected. Initiating start request. 
SignalR: The start request succeeded. Transitioning to the connected state. 

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

Спасибо за помощь!

ОБНОВЛЕНИЕ: Я загрузил образец и запустил его как есть на сервере. В той же ситуации, поэтому это, скорее всего, настройка конфигурации сервера, которую я пропустил по пути. Я до сих пор не нашел то, что пропустил.

+0

Вы пытались установить связь SignalR от вас машины Windows Server? Это может иметь какое-то отношение к сети.Возможно, есть прокси-сервер или что-то среднее между клиентом и сервером, который не поддерживает WebSockets. – halter73

+0

Фантастический. Устранение всех этих проблем, и я забыл про простое правило проверки провода. Пожалуйста, сделайте это ответом, чтобы я мог его принять. – junkyspace

+0

Команда SignalR состоит из политически назначенных псевдо-разработчиков. Код не имеет значения, только принадлежность к группе ПК. – LastTribunal

ответ

0

Возможно, это связано с настройками IIS. Я видел их на http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/supported-platforms

-IIS должен работать в интегрированном режиме; классический режим не поддерживается. Задержки сообщений до 30 секунд могут возникнуть, если IIS запускается в классическом режиме с использованием транспорта событий с сервером.

-Хостинг-приложение должно работать в режиме полного доверия.

Кроме того, в нем упоминалось, что .NET 4.5 является целевой структурой. Надеюсь, это помогло.

+0

Спасибо. Я дважды проверил все эти параметры, и все они настроены правильно. Проблема все еще существует. – junkyspace

0

Попробуйте установить соединение SignalR со своей машины Windows Server. Это может иметь какое-то отношение к сети. Возможно, есть прокси-сервер или что-то среднее между клиентом и сервером, который не поддерживает WebSockets.

0

Если вы находитесь в сети с «корпоративным» брандмауэром, это может испортить рукопожатие веб-карт.

Но вы можете предотвратить это вмешательство при доступе к серверу через SSL. Я видел, что это первая рука была причиной и решением несколько раз для проблем с веб-серверами в корпоративной среде.