2013-10-11 1 views
1

SignalR, OWIN 및 Azure 작업자 역할을 사용하는 간단한 WebSocket 서버를 얻으려고합니다.간단한 SignalR Azure 작업자 역할을 수행 할 수 없습니다.

WorkerRole.cs :

public class WorkerRole : RoleEntryPoint 
{ 
    public override void Run() 
    { 
     string url = "http://" + RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MyEndpoint"].IPEndpoint; 
     using (WebApp.Start<Startup>(url)) 
     { 
      Trace.WriteLine(String.Format("Server running on {0}", url)); 
     } 

     while (true) 
     { 
     } 
    } 
    /* ... */ 
} 

Startup.cs :

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

MyHub.cs :

public void Send(string name, string message) 
{ 
    Clients.All.addMessage(name, message); 
} 

끝점 "MyEndpoint은"HTTP로 서비스에 정의되어, 공립 및 사설 포트 5001

서비스를 시작한 후 Azure Compute Emulator에서 5001로 실행 중으로 표시됩니다. 그러나 ws : //127.0.0.1 : 5001/signalr (또는 ws : //127.0.0.1 : 5001)에 연결하려고하면 서비스가 시작됩니다. 응답이 없습니다. 이 목적을 위해 두 개의 서로 다른 웹 소켓 클라이언트를 사용하고 있습니다 (둘 다 Chrome 플러그인이며 둘 다 다른 WebSocket 서버를 사용하여 잘 작동했습니다).

질문 :

1) 설정에 문제가 있습니까?

2) SignalR JS 클라이언트 라이브러리를 사용하여 SignalR 서버에 연결해야합니까? 아니면 WebSocket 프로토콜을 구현하는 바닐라 클라이언트가 연결할 수 있습니까?

+0

다른 웹 소켓 프레임 워크 (XSockets)로 시도한 후 WebRole에서 실행될 때 (콘솔 응용 프로그램으로 작동 할 때) 코드가 작동하지 않으면이 문제가 Azure DevFabric과 관련이 있다고 생각하기 시작했습니다. 네트워크 통신을 처리합니다. Azure가 웹 소켓 통신을 방해 할 수있는 재미있는 네트워크 방식을 수행하는지 아는 사람 있습니까? 엔드 포인트가 있으며 Compute Emulator에 표시되지만 연결할 수는 없습니다. – tremolo

답변

1

나는 당신이 해결해야 할 두 가지 문제가 있습니다

1)이 오래된 게시물의 약간이지만 단지의 경우 누군가가 그것을 필요로 알고있다. (따라서 사용 (...) {} 블록) (실행 오른쪽 Trace.Writeline 통과 계속 이후 즉시 생성 후 배치 수단

using (WebApp.Start<Startup>(url)) 
    { 
     Trace.WriteLine(String.Format("Server running on {0}", url)); 
    } 

이는 IDisposable을 반환 .. : 모든 우선에있어서 시작 .) 일시 중지하지 않고.

Azure Compute Emulator에서 충돌을 피하기 위해 포트를 다시 매핑하기 때문에 약간의 이유 때문에이 작업을 약간 까다롭게 수행합니다. 명령 프롬프트를 열고 실행하면

netstat -a 

당신이이 같은 (내 경우에는 내가 포트 81을 사용하고 있습니다)보고 (듣고) 열린 포트가 있는지 확인할 수있는 것들 :

TCP 127.0.0.1:82   MyComputer:0    LISTENING 
    TCP 127.0.0.3:81   MyComputer:0    LISTENING 
을 비주얼 스튜디오의 일반 콘솔 출력 상에

, 당신은 또한 대부분

"Windows Azure Tools: Warning: Remapping private port 81 to 82 in role 'MyRoleThingy' to avoid conflict during emulation." 

이 모두 같은 순서대로 버리는에 연결하는 것을 의미한다 볼 수 있습니다 작업자 역할을 사용하여 호스팅하는 경우 81 대신 81 (아마도 5002)에 연결해야합니다.

2) 프로토콜을 구현하면 아무 것도 작동한다고 생각합니다. 포트에서 초기 연결을 관리하면 항상 작동해야합니다.

관련 문제