2013-08-22 3 views
1

내가 원하는 것은 기본이어야합니다. 그러나 뭔가를 놓치고 있어야합니다. 로컬로 실행되는 MVC3 앱 내에 정의 된 몇 개의 SignalR Hub를 가지고 있습니다. 동일한 솔루션에는 Windows Phone 8 & Windows Store 앱이 있으며 둘 다 실시간 통신을 위해 SignalR 허브와 통신합니다. SignalR 서버 최신 비트 사용 & 클라이언트는 최신 .NET Nuget을 사용합니다. 클라이언트 측에 Windows Phone 8에서 SignalR 허브 연결

이 내가 쓰기에 익숙 것입니다 : 이것은 윈도우 8 앱 클라이언트 & 완벽하게 잘 작동

 IHubProxy SignalRChatHub; 
     HubConnection chatConnection = new HubConnection("http://localhost:53478/"); 
     SignalRChatHub = chatConnection.CreateHubProxy("ChatHub"); 

     await chatConnection.Start(); 
     if (chatConnection.State == Microsoft.AspNet.SignalR.Client.ConnectionState.Connected) 
     { 
      // Stuff here. 
     } 

우리가 IIS에서 로컬로 실행되는 SignalR 허브와 쉽게 연결이있다. 그러나 동일한 코드가 Windows Phone 클라이언트에서 작동하지 않습니다. connection.start()는 404 예외로 폭탄을 터뜨립니다.

약간의 연구 끝에 WP 에뮬레이터 VM이 다른 시스템으로 취급되고 호스트 시스템의 네트워크를 가상으로 사용하는 것처럼 보입니다. 따라서 IIS가 Windows Phone 8 응용 프로그램의 SignalR 허브에 대한 접근을 허용하지 않는 외부로부터의 호출을 차단할 수 있습니다. 따라서 localhost 외부의 연결을 허용하기 위해 SignalR 서버 앱의 applicationhost.config를 조정합니다. 이제 SignalR 허브는 localhost와 로컬 IP 모두에서 작동합니다. 윈도우 폰 클라이언트 코드가 변경

RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true }); 

: 또한, 라우팅 Global.asax.cs에서 크로스 도메인 SignalR 연결을 허용하도록 변경되었습니다

HubConnection chatConnection = new HubConnection("http://<LocalIP>:53478/"); 

을하지만이를 계속 실패 "원격 서버가 오류를 반환했습니다 : 찾을 수 없음"예외가있는 connection.start(). 필자는 전화 에뮬레이터에서 네트워크 트래픽을 스니핑하고 connection.start() 호출에 대한 응답으로 전혀 아무것도 표시하지 않습니다.

무엇이 누락 되었습니까? 모든 포인터가 도움이 될 것입니다 .. 감사합니다!

답변

3

나 자신을 알아 냈어. WPDev 에뮬레이터의 SignalR 연결 문제가 실제로 IIS/Windows 보안 때문이었습니다. 조금 더 IIS 설정 & Windows 방화벽을 통해 로컬 포트를 열면 문제가 해결되었습니다. 그것에 대해 블로그가됩니다. 하지만이 두 게시물이 도움 :

관련 문제