Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server CLR过程能否打开端口并侦听它?_Sql Server_Udpclient - Fatal编程技术网

Sql server CLR过程能否打开端口并侦听它?

Sql server CLR过程能否打开端口并侦听它?,sql-server,udpclient,Sql Server,Udpclient,我希望有一个clr过程,调用该过程时打开一个udp端口以侦听传入数据。它永远不会返回给调用方。调用方将其超时设置为无限。MSSQL服务器会允许吗?这是一个判断调用。我认为最重要的决定因素是插座保持打开的时间。如果它是一个“事务性”长度,在不同的系统中差异很大,那么我会说这很好。我看不出集群有任何问题,因为SQLServer没有活动/活动集群(但NLB肯定可以)。另一个决定因素是套接字是否是单个实例(在非广播端口上侦听) 因此,如果: 函数/存储过程将从T-SQL(SQL Server代理或SS

我希望有一个clr过程,调用该过程时打开一个udp端口以侦听传入数据。它永远不会返回给调用方。调用方将其超时设置为无限。MSSQL服务器会允许吗?

这是一个判断调用。我认为最重要的决定因素是插座保持打开的时间。如果它是一个“事务性”长度,在不同的系统中差异很大,那么我会说这很好。我看不出集群有任何问题,因为SQLServer没有活动/活动集群(但NLB肯定可以)。另一个决定因素是套接字是否是单个实例(在非广播端口上侦听)

因此,如果:

  • 函数/存储过程将从T-SQL(SQL Server代理或SSRS?)调用
  • 函数/存储过程预计将在“事务”时间段内退出
    (我会说30秒是典型的-但是在高负载系统中,一个锁,然后等待30秒的调用可能是该死的,所以你需要考虑你的用例。)
  • 该函数是可重入的(可以并行运行多次)
如果:

  • 该函数是从C#或其他功能更强大的客户端调用的(您在那里处理吗?可能是一个库?)
  • 函数将等待远远超过典型事务长度的不确定时间
  • 该函数是单个实例(只有单个会话才能成功执行该函数)
考虑几个例子来说明不同之处:

SQL Server代理作业,每天用从大型机上刮取的速率图填充表。 安装了一个CLR函数,该函数接收XML刮片文档,连接到大型机,并使用TN 3270屏幕刮片以XML文档中指定的形状返回结果集

  • 必须从SQL调用(便于维护和故障报告)
  • 如果超过设定的超时时间(~30s),则应超时
  • 可以在多个会话中并行运行
  • 答案:是SQL CLR函数的理想候选
“Ticker”应用程序,其中应用程序侦听价格更新的UDP广播,并将结果集作为流式结果集返回给客户端 CLR函数打开UDP广播侦听端口,并将结果异步写入客户端。这将一直持续到达到应用程序定义的结束条件(特定数据包负载、查询取消或超时)

  • 必须从SQL调用以处理多种平台的混合(有些客户端在Linux上的PHP上,有些客户端在Windows上的VB6上)
  • 具有已定义且用户可控制的超时(但此测试部分失败,因为它可能会超过事务持续时间)
  • 可以在多个会话中并行运行(广播)
  • 答案:SQL CLR函数的“确定”候选项
将接收到的事件转储到表中的系统日志服务器 在0.0.0.0:514上打开UDP侦听器并将事件作为流式结果集返回的函数

  • 没有真正的理由必须从SQL调用它,因为它正在缓冲一个表
  • 没有超时-预计将全天候运行
  • 调用应用程序(SQL Server代理)必须确保此函数始终只执行一次,并在失败时重新启动它(重新实现service manager)
  • 强>回答:不适合SQL CLR,考虑Service Buffer+NT服务
可能是的,但为什么?ServiceBroker不能满足您的需求吗?请代表各地的DBA,不要这样做。让它作为调用SQL Server的独立服务运行。@Mitch,恐怕你会这么说的:(而且没有一个服务代理不能满足需要。是的。我想你可能会。从技术上讲,这是可能的,我可以想象它会有意义的情况(主要是在短期事务中-连接到IP和端口的exec表值CLR UDF,并将结果流回到t-SQL调用方-可能从SQL Server代理抓取屏幕)。但是,对于从系统日志流读取的单个实例,我确实建议使用单独的服务。然后,T-SQL客户端可以通过service Broker接收这些结果。因此,答案是肯定的,但看在上帝的份上,请不要这样做。此外,如果这一结果被群集化,会发生什么?