2014-08-29 133 views
1

我使用SQL Server 2014构建一个支持票系统,ASP.Net MVC 5角JS等发送TCP消息/删除触发器

作为设计的一部分,我想为我的路系统知道票证何时更新,删除或创建。

这样,如果用户打开了票据并在打开票据时进行了更改,我可以设计系统以强制他们刷新票证,然后他们自己可以对票据进行更改,以防止用户B重写用户A的变化他们没有看到。

理想情况下,我想设计一个TCP协议服务器作为Windows服务,并能够连接到它并从Sql Server中的表触发器发送数据。

然后,应用程序的前端将使用Javascript和WebSockets。所以应用程序将连接到套接字服务器以及sql服务器。当用户打开票证时,我会发送一条消息,表明用户XXY的票证00X打开。当sql服务器发生更改时,它会告知服务器Ticket 00X已更改。然后,Socket服务器告诉连接到它的客户正在查看Ticket 00X,它已经改变了,并且javascript阻止了一个提交,直到一个新的完成。

但是...可以sql服务器做到这一点?不会出现如此。

所以我想知道是否有可能建立一个SQL Server的插件来支持它像PostgreSQL的通知功能。

更新:

我发现在SQL Server用户定义的CLR函数和设法得到它的工作。 (C#/ .Net框架),我做了一个静态类,像一些静态方法,

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

然后我注册它在SQL Server中,

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 

AS EXTERNAL NAME MyCompanyName_MyDll.UserDefinedFunctions.NotifyTicketUpdated;

然后调用它的SQL,我只是做

select dbo.XYZ_Notify_Ticket_Updated(@ticketIDHere); 

而且它所有的作品。我在c#中的静态方法将TCP/IP消息发送到我的套接字服务器,然后服务器检查谁在查看该票证ID并向他们发送Ticket_Updated消息。在客户端javascript中运行的websocket图层会看到它,并锁定更新/保存的票据。

回答

0
  1. 您可以使用CLR,这需要一些设置。
  2. 您可以创建一个EXE,您可以使用SP中的参数进行shell处理。
  3. 你可以实现一些标准的并发。 Optimistic vs Pessimistic

所以是的,这是可能的。

+0

与CLR部分,我只是不知道这意味着什么正确的蝙蝠。我做了一个用户定义的功能。 当我完成所有工作后,我想我会创建一个UDT,将websocket客户端连接到一张票。例如。 UDT将用于存储TicketID,并且UDT将确定哪些WebSocket客户端需要通知,以便在sql server中更新该行时,更新触发器将在其UDT上调用NotifyUpdate。 – 2014-09-02 15:48:25

2

或者您可以使用Service Broker来处理异步通知。不是最简单的学习,而是轻量级,可扩展且已内置的。