2014-08-29 1 views
1

내가는 SQL 서버 2014를 사용하여 지원 티켓 시스템을 구축하고, ASP.Net MVC (5), 각 JS 등을 삭제 내 시스템을 사용하여 티켓이 업데이트, 삭제 또는 생성 된시기를 알 수 있습니다.보내기 TCP 메시지/</p> <p>가 디자인의 일부로서 내가있는 방법을 원하는 트리거

그런 식으로 사용자가 티켓을 열었을 때 티켓이 열린 상태에서 변경된 경우 티켓을 새로 고침하여 티켓을 새로 고칠 수 있도록 시스템을 설계하여 사용자 B가 사용자를 무시하지 못하게 할 수 있습니다 A가 보지 못했던 변화.

이상적으로는 TCP 프로토콜 서버를 Windows 서비스로 설계하고이 서버에 연결하여 Sql Server의 테이블 트리거에서 데이터를 보내고 싶습니다.

그런 다음 응용 프로그램 프런트 엔드는 Javascript와 WebSockets를 사용합니다. 따라서 응용 프로그램은 SQL Server뿐만 아니라 소켓 서버에도 연결됩니다. 사용자가 티켓을 열면 사용자 XXY에게 티켓 00X가 열려 있다는 메시지를 보냅니다. SQL Server에서 변경이 발생하면 서버 00X가 변경되었음을 알립니다. 그런 다음 소켓 서버는 연결된 클라이언트에게 Ticket 00X가 변경되었음을 알려주고 자바 스크립트는 새로운 것이 완료 될 때까지 제출을 금지합니다.

하지만 ... SQL Server에서이 작업을 수행 할 수 있습니까? 그렇게 나타나지 않습니다.

그래서 PostgreSQL의 알림 기능처럼 SQL Server 용 플러그인을 빌드 할 수 있는지 궁금합니다.

업데이트 :

내가 SQL 서버의 사용자 정의 CLR 기능을 발견했는데이 작업을 진행하게 처리했다. (. C의 #/닷넷 프레임 워크) 나는

public static int NotifyTicketUpdate(int ticketID) 
{ 
    //... 
} 

가 그럼 난 EXTERNAL NAME MyCompanyName_MyDll.UserDefinedFunctions.NotifyTicketUpdated AS

USE TLCDB; 
CREATE ASSEMBLY MyCompanyName_MyDll 
FROM 'd:\pathtodll\mydll.dll' 
WITH PERMISSION_SET = SAFE; 

CREATE FUNCTION XYZ_Notify_Ticket_Updated(@input int) RETURNS int 

, SQL 서버에 등록, 같은 일부 정적 메소드와 정적 클래스를 만들어;

그럼 난 그냥

select dbo.XYZ_Notify_Ticket_Updated(@ticketIDHere); 

을 그리고 모든 작품, SQL에서 호출합니다. C#의 My Static 메서드는 TCP/IP 메시지를 소켓 서버에 보내고 서버는 그 티켓 ID를보고 누가 Ticket_Updated 메시지를 보내고 있는지 확인합니다. 클라이언트 자바 스크립트에서 실행중인 websocket 레이어는 그것을보고 업데이트/저장을 위해 티켓을 잠급니다.

답변

0
  1. 약간의 설정이 필요한 CLR을 사용할 수 있습니다.
  2. SP의 매개 변수로 쉘 할 수있는 EXE를 만들 수 있습니다.
  3. 표준 동시성을 구현할 수 있습니다. Optimistic vs Pessimistic

그래, 가능합니다.

+0

CLR 부분으로 갔는데 방망이가 의미하는 것이 무엇인지 알지 못했습니다. 내가 할 사용자 정의 함수를 만들었습니다. 모두 끝났을 때 WebSocket 클라이언트를 티켓에 묶을 UDT를 만들 것이라고 생각합니다. 예 : UDT는 TicketID를 저장하는 데 사용되며 UDT는 SQL Server에서 행이 업데이트 될 때 업데이트 트리거가 UDT에서 NotifyUpdate를 호출하도록 WebSocket 클라이언트에 통보해야하는지 여부를 확인합니다. –

2

또는 Service Broker를 사용하여 비동기 알림을 처리 할 수 ​​있습니다. 배우기가 가장 간단한 것은 아니지만 가볍고 확장 가능하며 이미 내장되어 있습니다.

관련 문제