2013-01-13 2 views
2

SignalR 교차 도메인에 관한 질문. WCF를 사용한 도메인 간 신호 교환

  • DAL
  • 서비스 (WCF를 사용하여)

    • 데이터
    • ClientWeb1 (CW1)
    • ClientWeb2 (CW2)

    : 내 .NET 응용 프로그램에서 다음 층이 서비스 계층의 이유는 cw1/cw2의 SignalR 허브 사이에서 중개자 역할을하기 때문입니다.

    cw1이라는 목표는 컨트롤러에 일종의 업데이트 메시지를 보내고 cw1의 허브를 업데이트 한 다음 cw1의 허브를 업데이트하여 모든 cw1 (표준 신호 기능)에 브로드 캐스팅합니다.

    또한 cw1의 컨트롤러가 cw2 클라이언트가 cw1에서 업데이트를 알 수 있도록 내 서비스 레이어에 추가 메시지를 보내야합니다. 이 시점에서 내 서비스 계층에서 cw2의 허브를 호출하고 cw1의 초기 메시지를 기반으로 모든 cw2의 클라이언트에게 메시지를 보낼 수있게하려고합니다.

    내 질문은 이것입니다 : 어떻게 외부 서비스 계층에서 cw1 또는 cw2의 허브에 액세스 할 수 있습니까? 이것이 가능한가? 나는 그럴 줄 알았지 만, 많은 추천받지 못한 SignalR 기능 때문에 최고의 답을 찾지 못하는 것 같습니다.

  • 답변

    2

    감사 http://xsockets.net/blog/sneak-peek-at-the-30-features

    감사 을 Uffe.나는 결국 다음 단계를 수행하여이 문제를 해결했습니다.

    WCF 서비스 제거.

    가상 디렉터리에 다른 웹 프로젝트를 설정하면 내 허브를 유지할 수 있습니다.

    그런 다음 클라이언트 측 스크립트 참조를 변경하여 다른 2 개의 웹 프로젝트에서 내 SignalR 클라이언트를 지적했습니다.

    <script src="Scripts/jquery-1.6.2.min.js" type="text/javascript"></script> 
    <script src="Scripts/jquery.signalR.min.js" type="text/javascript"></script> 
    <script src="http://localhost/MyThirdVirtualDirWebProj/signalr/hubs" type="text/javascript"></script> 
    

    그러면 내 세 번째 '중간 남자'프로젝트의 허브와 메시지를 보낼 수 있습니다. 위에서 언급 한 XSocket을 사용하면이 작업을 수행하는 것이 더 좋은 방법 일 수 있습니다. 그러나 이것은 꽤 잘 작동하는 것 같습니다.

    1

    최대한 내게는 이 아니며이 가능합니다. 허브와 통신하려면 공용 API 또는을 통해 메시지를 보내야합니다. 동일한 ASP.NET 인스턴스에서 허브 옆에 다른 개인 API (예 : WCF 서비스)가 있어야합니다. GlobalHost.ConnectionManager.GetHubContext<MyHub>()을 사용하여 메시지 자체를 브로드 캐스트하거나 WCF 서비스와 "SignalRness"를 분리하는 일부 공유 내부 인터페이스를 사용하여 문제를보다 명확하게 구분할 수 있습니다.

    공개 API를 통해 메시지를 보내면 허브에 연결된 모든 사람이 동일한 메시지를 보낼 수 있다는 것을 의미하므로 별도의 서비스를 사용하는 것이 좋습니다. 그들이 무엇인지 밖으로. 특정 호출자 만 호출 할 수 있도록 특정 허브 메소드에 대해 다른 레벨의 보안 검사를 도입하거나 사용해야 할 수도 있습니다.

    1

    SignalR을 사용하는 방법을 모르겠지만 XSockets.NET에서는 쉽게 사용할 수 있습니다.

    https://github.com/codeplanner/XSocketsWCF/blob/master/src/XSocketsWCF/XSocketsWCF/WCF/Service/RoomService.cs

    링크는 웹 소켓 서버에 연결되어있는 WCF에,하지만 당신은 프로젝트 ... 키우면 모든 존재를 다운로드 할 수 있습니다.

    또 다른 장점은 XSockets가 클러스터 된 서버 3.0을 제공하여 서버 1의 메시지가 server2에 도착하고 (그 반대의 경우) WCF 부분이 필요하지 않음을 의미합니다. 3.0 릴리스 정보

    : 귀하의 답변