【发布时间】:2010-12-13 23:54:46
【问题描述】:
我正在尝试创建一个 SQL Server CLR 用户定义函数,该函数连接到第 3 方服务(托管在与 SQL Server 实例相同的服务器上)。有没有办法让 WCF 命名管道或 TCP 在这种情况下工作?如果我提供中介服务,有没有更好的方法来做到这一点?
【问题讨论】:
标签: c# visual-studio-2008 wcf sql-server-2005
我正在尝试创建一个 SQL Server CLR 用户定义函数,该函数连接到第 3 方服务(托管在与 SQL Server 实例相同的服务器上)。有没有办法让 WCF 命名管道或 TCP 在这种情况下工作?如果我提供中介服务,有没有更好的方法来做到这一点?
【问题讨论】:
标签: c# visual-studio-2008 wcf sql-server-2005
不要在 SQLCLR 中实现 IPC。托管 CLR 的 SQL 服务器使用 SQL threading primitives,您最终会饿死 SQL 工作线程和调度程序。
从 SQL Server 之外的进程执行所有 IPC。如果您需要通过 SQL 作业(来自存储过程和触发器)与此进程通信,请使用数据库内队列,通过Tables as Queues 或Service Broker。
【讨论】:
BeginThreadAffinity() 之前。抢先模式修复了一些问题,因此 XP 更好一些。但是,如果您可以从 XP 中避免 IPC,请避免使用它。如果您从触发器执行 IPC,请考虑使用消息队列,从触发器插入队列并让外部进程处理 IPC,在触发器 xact 提交之后。