2016-02-08 3 views
4

Возможно ли использовать сигнальное устройство с Service Fabric, поставляемое Microsoft? Я пытаюсь подключить приложение UWP и приложение angularJS к моей надежной службе без состояния, размещенной в лазурном кластере через соединение signalR/websocket. Но оба они не могут открыть такую ​​связь. На моей локальной машине все работает нормально.Использование SignalR с использованием Azure Service Fabric

Есть ли что-нибудь особенное, чтобы рассмотреть использование сигналаR/websockets с Service Fabric? Есть ли какой-нибудь пример?

+0

Почему вы создали 2 вопроса, которые почти одинаковы? Выберите один ... – Mikhail

+0

Посмотрите на эту [объединительную плату] (http://stackoverflow.com/questions/39649027/setup-signalr-and-service-bus-inside-a-azure-service-fabric-service/40525730 # 40525730). Я был бы рад, если бы его помощь. – Venkatesh

+0

Обратитесь к [link] (http://stackoverflow.com/questions/39649027/setup-signalr-and-service-bus-inside-a-azure-service-fabric-service/40525730#40525730). Был бы рад, если это сработает для вас. – Venkatesh

ответ

5

Вам необходимо настроить балансировщик нагрузки на клиентский ip. Тогда пользователь всегда будет обращаться к тому же узлу и другим пользователям к другим узлам. Отношение пользователя к узлу будет постоянным.

+0

Хорошая точка Кевин. Не могли бы вы предоставить немного больше информации о том, как именно я могу реализовать IP-адрес сопоставления для хоста службы в LB? (Я новичок в Azure) Кроме того, как вы предлагаете обрабатывать изменение IP-адреса пользователя? –

+0

Эта статья stackoverflow дала хороший пример того, как использовать балансировщик нагрузки. Мы попробовали, и это сработало. [link] (http://stackoverflow.com/questions/36818744/signalr-with-service-fabric-stateless-web-api) – Shaun

+0

Я получаю следующую ошибку. Используют siganlr.core или 2.2 ??? version.Unhealthy event: SourceId = 'System.RA ', Property =' ReplicaOpenStatus ', HealthState =' Warning ', OpinWarningAsError = false. У Replica было несколько сбоев при открытии на _Node_0. API-вызов: IStatelessServiceInstance.Open(); Ошибка = System.Reflection.TargetInvocationException (-2146232828) Исключение выбрано целью вызова. в System.RuntimeMethodHandle.InvokeMethod (Object target, Object [] arguments, Signature sig, Boolean constructor) в – indra257

5

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

appBuilder.Map("/signalr", map => 
     { 

      map.UseCors(CorsOptions.AllowAll); 
      var hubConfiguration = new HubConfiguration() 
      { 
       EnableJSONP = true, 
       EnableDetailedErrors = true, 
       EnableJavaScriptProxies = true 
      }; 

      map.RunSignalR(hubConfiguration); 
     }); 

Этот код можно найти в файле readme.txt мы получаем после установки пакета NuGet для SignalR. Для функции кросс-домена вам также необходимо установить пакет Cores nuget.

После развертывания этого приложения вы можете увидеть, что некоторые вызовы signalR терпят неудачу, а Some - успешно. По умолчанию количество экземпляров в службе «Надежный безгосударственный» равно -1. Таким образом, для службы будет создано несколько экземпляров.

От метода signaleR Connection.Start() будут вызываться три SingalR API. Эти вызовы должны выполняться в течение одного сеанса для правильной работы. Когда мы вызываем эти три API в Service Fabric с несколькими экземплярами, вызов может обрабатываться в разных узлах и, следовательно, разные сеансы, что приводит к сбою в синхронном соединении.

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

+0

Я получаю следующую ошибку. Используют siganlr.core или 2.2 ??? version.Unhealthy event: SourceId = 'System.RA', Property = 'ReplicaOpenStatus', HealthState = 'Warning', OpinWarningAsError = false. У Replica было несколько сбоев при открытии на _Node_0. API-вызов: IStatelessServiceInstance.Open(); Ошибка = System.Reflection.TargetInvocationException (-2146232828) Исключение выбрано целью вызова. в System.RuntimeMethodHandle.InvokeMethod (Object target, Object [] arguments, Signature sig, Boolean constructor) в – indra257

+0

Думаю, я использовал signalr 2. * версию .. Я считаю, что вы используете службу Stateless. Получаете ли вы эту ошибку при отладке на локальной машине? –

+0

Когда я использую websockets, я получаю сообщение об ошибке во время рукопожатия WebSocket: Неожиданный код ответа: 204. Но когда я использую SSE, он отлично работает. – indra257

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