2012-03-26 4 views
3

SqlCacheDependency (또는 SqlDependency)와 함께 SignalR을 사용하여 데이터베이스 업데이트를 브라우저에 직접 푸시 할 수 있습니까? 이 기능을 구현하는 다른 방법이 있습니까?SqlDependency와 함께 SignalR을 사용하여 데이터베이스 업데이트 푸시

지금 내가 할 수있는 유일한 일은 datase에 대한 업데이트를 수행하는 비동기 호출에서 addMessage를 호출해야하는 것을 포함하지만 실제로는 다른 소스의 업데이트 (예 : 테이블을 업데이트하는 백그라운드 서비스).

답변

1

확인을 할 수있는 한 가지 방법을 : 당신이 외부에서 허브로 호출되기 때문에 당신은 at the bottom of the documentation here을 표시 기술을 사용해야합니다.

내가 처음에 이해하지 못한 점은 mvc 컨트롤러에서 해당 코드를 사용해야한다는 것입니다. 일단 그렇게했으면 다른 위치 나 응용 프로그램에서도 컨트롤러를 호출 할 수 있습니다. WebRequest 클래스입니다.

@Hightechrider 완벽을 기하기 위해 코드 조각을 만들기 위해 2 개의 참조를 추가해야합니다. 이 데모 코드는 PersistentConnection을 사용하여 수행되지만 허브의 원칙은 물론 같습니다.

EDIT : sqldependency를 관리하기 위해 asp.net mvc에서 스레드를 사용하고 있습니다.이 솔루션은 좀 더 통합 된 솔루션이라고 느낍니다. 확인 asp.net에서 http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc;  

using SignalR.Infrastructure; 
using SignalR.Hosting.AspNet; 
using SignalR; 

namespace SignalRDemo.Controllers 
{ 
    public class DemoController : Controller 
    { 
     public void sendMessage(string message) 
     { 
      IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); 
      IConnection connection = connectionManager.GetConnection<MyConnection>(); 

      connection.Broadcast(message); 
     } 
    } 
} 
+1

왜 SQL Dependency를 별도의 프로세스로 모니터링해야합니까? 웹 사이트에서 데이터베이스를 직접 모니터링 할 수없는 몇 가지 인프라 스트럭처 이유가 없으면 ASP.NET에서 실행되는 스레드에서 모니터링 할 수 있습니다. 어떤 경우이든 새로운 ASP.NET 웹 API를 사용하는 것이 더 낫다면 API를 HttpPost로만 설정하여 우연한 (또는 악의적 인) 호출을 막을 수 있습니다. 웹 페이지. –

+0

답장을 보내 주신 @Hightechrider thx, 악의적 인 사용을 막기 위해 인증을 구현할 계획 이었지만 게시글을 사용하는 것이 좋습니다. 내 asp.net mvc 응용 프로그램 내에서 별도의 스레드를 시작하는 방법을 모르겠습니다, 어떤 시점에서 스레드를 시작해야합니다 (나는 글로벌 asax, Application_start 생각하고 있지만 확실하지 않습니다) –

+0

예, 시작 Global.asax는 일반적입니다. 물론 AppPool은 유휴 상태 일 때 종료 될 수 있습니다 (서비스를 필요로하는 이유입니다).하지만 귀하의 경우 아무도 사이트를 사용하지 않으면 (SignalR 또는 기타를 통해) 데이터베이스가 업데이트되는지 상관하지 않습니다. –

5

the OnChange event on a SQLDependency을 사용할 수 있습니다. 이벤트 핸들러에서 SignalR을 통해 메시지를 보낼 수 있습니다. 나는 적어도 그것을 파악하거나,

using SignalR.Infrastructure; 

IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); 
dynamic clients = connectionManager.GetClients<MyHub>(); 
... 
+0

"올바른 방법"백그라운드 처리를 구현하는 방법에 대한이 게시물은 그냥 참고로, 우리는이 메커니즘을 사용하여 SQL을 기반으로 scaleout 솔루션을 구현 할 계획입니다. – davidfowl