我正在使用Sql Server 2014,ASP.Net MVC 5,角度JS等构建支持服务单系统。
作为设计的一部分,我想让我的系统知道何时更新,删除或创建故障单。
这样一来,如果一个用户打开了一个票据并且在打开它时进行了更改,我可以设计系统以强制他们刷新票证,然后他们自己可以对其进行更改,以防止用户B覆盖用户A的他们没见过的变化。
理想情况下,我想将TCP协议服务器设计为Windows服务,并能够连接到它并从Sql Server中的表触发器发送数据。
然后应用程序前端将使用Javascript和WebSockets。因此应用程序将连接到套接字服务器以及sql server。当用户打开票证时,我会发送用户XXY打开Ticket 00X的消息。当在sql server中发生更改时,它会告知服务器Ticket 00X已更改。然后,Socket服务器告诉连接到它的客户端正在查看Ticket 00X它已经更改,并且javascript阻止提交,直到完成一个新的。
但是...... sql server可以这样做吗?不会出现。
所以我想知道是否可以为SQL Server构建一个插件,以便像PostgreSQL的Notify功能一样支持它。
更新
我在SQL Server中发现了用户定义的CLR函数,并设法使其正常工作。 (C#/ .Net Framework)我用一些静态方法创建了一个静态类,比如
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 :(得分:2)
或者您可以使用Service Broker来处理异步通知。这不是最简单的学习方法,而是轻量级,可扩展且已经内置。
答案 1 :(得分:0)
是的,这是可能的。