小编Dav*_*ave的帖子

关闭具有线程的Windows服务

我有一个用.NET 3.5(c#)编写的Windows服务,它带有一个System.Threading.Timer,它在每个回调中产生几个Threads.这些只是普通线程(没有线程池),我在每个线程上设置了IsBackground = true,因为我只会运行托管代码.

当用户停止服务时,所有线程会发生什么?他们优雅地死了吗?我没有任何代码通过调用join或abort来管理线程.假设IsBackground = true足以假设线程将在用户停止服务时被处理和停止是否正确?当有人通过Service Manager GUI停止Windows服务时会发生什么?它会在触发OnStop事件后终止进程吗?

这对我来说实际上是可以接受的,因为我已经构建了一个单独的机制,允许用户在停止服务之前确定没有线程.这是通过在Windows服务中运行的ServiceHost公开的2个WCF方法完成的.有一种方法可以停止生成新线程,另一种方法可以查询剩余的运行线程数.

我只是好奇如果他们跳过这些步骤并停止服务会发生什么......似乎IsBackground帮助实现了这个目标:

wcf multithreading windows-services isbackground

7
推荐指数
1
解决办法
1955
查看次数

在proc中使用sp_executesql时出现"select permission denied"错误(Sql Server 2008)

我正在使用Sql Server 2008并且有一个在内部使用sp_executesql的proc.通过ASP.NET执行proc时,我一直收到以下错误:

对象'MyTable',数据库'MyDatabase',架构'dbo'上的SELECT权限被拒绝.

我已经对此做了大量研究,大多数人都指出我需要在动态查询读取的基础表上授予select权限.好吧,我已经完成了这个,它似乎仍然无法正常工作:

select object_name(major_id) as object,
 user_name(grantee_principal_id) as grantee,
 user_name(grantor_principal_id) as grantor,
 permission_name,
 state_desc
from sys.database_permissions
where major_id = object_id('User') and 
class = 1
Run Code Online (Sandbox Code Playgroud)
Results:
MyTable public  dbo SELECT  GRANT
MyTable guest   dbo SELECT  GRANT
MyTable myuser  dbo SELECT  GRANT
MyTable NT AUTHORITY\NETWORK SERVICE    dbo SELECT  GRANT

正如你所看到的,我试图在基础表上授予select,这已经过度了.我甚至重新编写了我的proc,以便它只在动态sql中引用MyTable.我甚至已经授予所有上述用户"proc"执行权限...没有运气.

上面的"myuser"是web.config中我的connectionstring中的用户名.

我在这里错过了什么吗?

谢谢!戴夫

asp.net permissions dynamic-sql sql-server-2008

5
推荐指数
1
解决办法
4557
查看次数

我们有多个针对单个数据库运行的应用程序服务器。如何确保队列表中的每一行只处理一次?

我们有大约 7 个运行 .NET Windows 服务的应用程序服务器,它们对单个 sql server 2005 队列表执行 ping 操作,并以固定时间间隔获取固定数量的记录进行处理。要处理的记录量和提取之间的时间量都是可配置的,最初设置为 100 秒和 30 秒。

目前,我的队列表有一个 int status 列,可以是“就绪、处理、完成、错误”。获取记录的过程有一个sql事务,事务内有以下代码:

1)将x条记录提取到临时表中,其中状态为“Ready”。select 使用了 Holdlock 提示

2) 将队列表中这些记录的状态更新为“正在处理”

.NET 服务执行一些处理,每个记录可能需要几秒钟甚至几分钟的时间。每个记录调用另一个过程,它只是将状态更新为“完成”。更新过程没有事务,因为我在这里依靠隐式事务作为更新子句的一部分。

我不知道这方面的流量例外情况,但估计每天会低于 10k 条记录。

这是处理这种情况的最佳方法吗?如果是这样,我是否遗漏了任何细节,例如这里或那里的提示?

谢谢!戴夫

t-sql sql-server locking

5
推荐指数
1
解决办法
191
查看次数