小编Mik*_*urs的帖子

什么是在IIS7中使用WAS时的global.asax Application_Start等价物

我想将netTcpBinding用于我目前在IIS7中托管的WCF应用程序,这意味着将其配置为使用WAS.这是相当直接的,但是,我的应用程序以前在global.asax文件中使用了Application_Start事件.我不需要访问httpContext(我理解IIS7中已经删除了访问权限),但我还是想挂钩启动或初始化方法?

在WAS中托管与IIS7相关的应用程序时是否存在等价物?

使用经典模式不是一个选项(我再次对httpcontext不感兴趣,如果使用http绑定,这似乎只能起作用) - 我已经看到了一个将静态类插入app_code文件夹的示例,该文件夹看起来像一个可怕的黑客.

wcf iis-7 was nettcpbinding global-asax

34
推荐指数
2
解决办法
3万
查看次数

如何通知DB表更改(sql 2005)的Windows服务(c#)?

我在SQL2005数据库中有一个负载很重的表(许多插入/更新/删除).我想尽可能接近实时地对所有这些更改进行一些后期处理(异步以便不以任何方式锁定表).我看了很多可能的解决方案,但似乎无法找到一个感觉正确的整洁解决方案.

后期处理的类型也相当繁重,以至于Windows侦听器服务实际上将处理传递给许多机器.然而,应用程序的这部分已经启动并运行,完全异步,而不是我需要帮助 - 我只是想提及这只是因为它影响设计决策,因为我们不能只加载一些CLR对象DB完成处理.

所以,简单的问题仍然存在:表中的数据更改,我想在远程服务器上的c#代码中进行一些处理.

目前我们已经提出使用一个sql触发器,它执行"xp_cmdshell"来启动一个引发windows服务正在侦听的事件的exe.这只是感觉很糟糕.

但是,我在网上看到的其他解决方案也让人感到相当费解.例如,设置SQLCacheDependancy还涉及必须设置Service Broker.另一个可能的解决方案是使用CLR触发器,它可以调用Web服务,但是这里有很多关于它的警告,这是一个糟糕的方法,尤其是在性能至关重要时.

理想情况下,我们不会对表格进行更改,而是会拦截我们的应用程序中的调用并从那里通知服务,遗憾的是,虽然我们有一些遗留应用程序也会对数据进行更改,并且监视表格是唯一的集中位置此时此刻.

非常感激任何的帮助.

摘要:

  • 需要实时响应表数据的变化
  • 表现至关重要
  • 预计会有大量的流量
  • 轮询和计划任务不是一种选择(或实时)
  • 实施服务代理太大(但可能只是解决方案?)
  • CLR代码尚未排除,但如果建议则需要执行
  • 监听器/监视器可能是远程机器(可能是相同的物理网络)

c# triggers sql-server-2005 sqlclr

16
推荐指数
1
解决办法
2万
查看次数

在字典的linq迭代期间可能导致堆栈溢出的原因是什么?

我有以下字典:

Dictionary<long, ChangeLogProcess> _changeLogProcesses = 
    new Dictionary<long, ChangeLogProcess>();
Run Code Online (Sandbox Code Playgroud)

我有一个方法试图在特定状态的字典中获取下一个changelogprocess(如果没有特定状态的项,则返回null):

 var changeLogProcesses =
     from entry in _changeLogProcesses
     where (entry.Value.Status == status)
     select entry.Value;

 changeLogProcess = changeLogProcesses.FirstOrDefault<ChangeLogProcess>();
Run Code Online (Sandbox Code Playgroud)

但是,在执行期间,它在linq查询期间抛出了堆栈溢出异常?我做了很多测试,以确保列表中有项目等等,但问题仍然存在?

值得注意的是,此方法是在多线程环境中运行的服务的一部分.上面的linq查询(以及对它的所有访问,例如添加/删除到列表中的项目,或列表中项目的状态更改)都包含在ReaderWriterLockSlim写锁中.同样,我已经对它进行了广泛的调试,以确保在任何时候都不会有单个线程访问列表.

什么可能导致它堆栈溢出,因为与一些可能的其他错误相关,例如在查询期间修改列表?(再次,我在任何时候只有一个线程访问列表)

编辑:根据要求获取getter和setter代码:

 public ChangeLogProcessStatus Status 
 {
    get { return _status; }
    set
    {
        //more that one place can initiate a retry now, so retry count is handled in the property setter
        if (PreviousStatus <= ChangeLogProcessStatus.Waiting && value >= ChangeLogProcessStatus.RetryWaiting)
        {
            this.ChangeLog.Tries++;

            //If it's retry waiting, remove this last service machine from the 
            //list …
Run Code Online (Sandbox Code Playgroud)

c# linq stack-overflow multithreading dictionary

2
推荐指数
1
解决办法
886
查看次数