2015-01-28 1 views
2

나는 signalR을 사용하여 서버 측 응용 프로그램 (asp.net mvc 응용 프로그램)에 연결된 클라이언트 응용 프로그램 (C# 데스크탑 응용 프로그램)을 가지고 있습니다. 이제 costumer가 사이트에서 내 제품 중 하나를 구입하면 클라이언트 응용 프로그램에 판매가보고됩니다. 하지만 보안상의 이유로 나는 서버 측에서만 "내 signalR 기자 메서드"라는 호출을 제한하는 것이 좋은 방법이라고 생각합니다! 하지만 어떻게 할 수 있을지 모르겠다.signalR 메소드를 서버에서만 호출하도록 구성 할 수 있습니까?

+2

당신이 호출 할 것으로 예상된다 다른? 들어오는 연결을 항상 청취하고있는 서버 연결과는 다릅니다. 클라이언트는 서버와의 연결을 시작해야합니다. – mason

+0

클라이언트 연결이없는 상태에서 허브를 호출하는 방법에 대한 코드를 표시해야합니다. – DLeh

+0

@DLeh 나는 클라이언트 어플리케이션에서 signalR 메소드를 호출하는 것이 중요하지 않다고 생각한다. 내 사이트에서 판매되는 제품을 판매 할 때 signalR은 제품 판매를 의미하고 signalR은 고객 관리 애플리케이션에 제품 판매가 명시되어야한다고합니다 (실시간보고). 사이트에서 호출 된보고 메소드가 어떤 본문이라도이를 볼 수있는 경우. – isaeid

답변

0

은 당신 싶어하는 일은

다음
var context = GlobalHost.ConnectionManager.GetHubContext<ProductHub>() 

당신이 다른 방법으로 클라이언트를 업데이트 모든 클라이언트 수, 제품이

먼저 문맥을 얻을 갱신 된 것을 사용자 신호입니다

context.Clients.All.updateProduct(product); 

특정 클라이언트 (연결 ID)

context.Clients.Client(id).updateProduct(product) 

사용자 ID

context.Clients.User(userId).updateProduct(product) 

하는 도메인 로직에서 추상적 인 허브 컨텍스트에 있는지 확인하십시오, 그것의 나쁜 관행은 그들 사이에 높은 커플 링을해야합니다.

당신도 그것을 추상화 한 라이브러리를 사용할 수 있습니다. 그런 라이브러리를 만들었고 완벽하게 필요하다고 생각합니다. 이벤트 수집기 또는 메시지 버스를 사용하십시오. domain method like

eventAggregator.Publish(new ProductUpdated(product)); 

내 라이브러리는 클라이언트에게 업데이트를 제공합니다. 여기 봐

http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/

+0

서버에서만 메서드를 호출 할 수 있는지 여부를 제한 할 수 있는지 의문이었습니다. 이것은 대답하지 않습니다. – John

+0

허브 메소드는 signalr 클라이언트를 통해 호출되도록 설계되었습니다. 클라이언트에서 호출 할 수없는 허브 메소드가 필요하지 않습니다. 그러나 허브 메서드의 컨텍스트에서 호출 할 필요는 없습니다. GlobalHost.ConnectionManager.GetHubContext (). 그래서 내 대답은 그 질문에 답합니다. – Anders

+0

친애하는 @Anders, 나는 당신이 정적 객체처럼 signalR 컨텍스트를 사용하고 컨텍스트로 메소드를 호출한다는 것을 의미한다고 생각합니다. 내 웹 응용 프로그램의 모든 기능에 signalR 메서드를 사용하고 싶지 않습니다. 난 아주 잘 reportR report 메서드를 호출 (이벤트 메서드)를 삭제하는 것 같아요. – isaeid

관련 문제