相关疑难解决方法(0)

Asp.Net中Task.Run和QueueBackgroundWorkItem之间的区别

究竟有什么区别

Task.Run(() => { 
     LongRunningMethod();
});
Run Code Online (Sandbox Code Playgroud)

要么

HostingEnvironment.QueueBackgroundWorkItem(clt => LongRunningMethod());
Run Code Online (Sandbox Code Playgroud)

我在Asp.Net MVC应用程序上进行了测试,在该应用程序中,我在使用Task.Run或QBWI调用的异步任务中继续在文本文件中写入一行约10分钟.

使用Task和QBWI都可以.我的异步方法一直写入该文件,直到10分钟没有任何问题.我没有观察到IIS对其回收的干扰.

那么QueueBackgroundWorkItem有什么特别之处呢?

.net c# asp.net-mvc asynchronous task-parallel-library

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

每当重新加载App域时,如何强制IIS应用程序池重新启动?

我们有一个ASP.NET MVC 4应用程序,它链接到传统的本机代码.问题是这个遗留代码具有在启动时构建的全局静态代码,但由于本机代码对App Domains一无所知,因此在重新加载App Domain时不会重新初始化该代码.在重新启动应用程序池进程之前,这会导致我们的应用程序中出现不正确的行为或崩溃.

因此,我想强制应用程序池在我们的应用程序的App Domain被回收时进行回收.IIS中是否有这样的设置,或者是否正在卸载域时我可以在我的应用程序中调用代码?

关于我的设置的一些信息,

  1. ASP.NET MVC 4应用程序
  2. IIS 7.5,但如果需要,我可以移动到8
  3. 我可以确保每个应用程序池有一个应用程序,因此我不会影响其他应用程序.

更新

根据下面的答案,我连接到AppDomain卸载事件,并使用类似于以下的代码来回收应用程序池.

try
{
   // Find the worker process running us and from that our AppPool
   int pid = Process.GetCurrentProcess().Id;
   var manager = new ServerManager();
   WorkerProcess process = (from p in manager.WorkerProcesses where p.ProcessId == pid select p).FirstOrDefault();

   // From the name, find the AppPool and recycle it
   if ( process != null )
   {
      ApplicationPool pool = (from p in manager.ApplicationPools where p.Name == process.AppPoolName …
Run Code Online (Sandbox Code Playgroud)

asp.net iis appdomain application-pool asp.net-mvc-4

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

获取应用程序池的正常运行时间

有没有办法可以确定c#中的应用程序池(在IIS7中)已启动多长时间(自启动以来的时间,或上次重启)?

c# iis-7 application-pool

7
推荐指数
2
解决办法
5734
查看次数

如何以编程方式获取特定网站IIS6的应用程序池名称?C#

如何使用C#获取特定网站IIS 6程序的应用程序池名称

编辑:我已经使用了DirectoryServices命名空间的方法,但是除非使用相同的代码显式设置,否则无法正确检索应用程序池名称.这意味着如果您使用iis管理器手动添加网站并设置应用程序池,那么当我使用sharepoint创建应用程序并设置不同的appPool这些方法不起作用时,这些代码将无法工作(它将始终返回DefaultAppPool).

c# iis application-pool

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

如何在IIS7中获取与应用程序池关联的应用程序

我有一个虚拟目录名称.对于这个虚拟目录,我必须找出相关的应用程序池.一旦我获得应用程序池,我必须找出此应用程序池中的所有虚拟目录..我使用此代码找出与虚拟目录关联的应用程序池

string AppPoolName = string.Empty;
            ServerManager manager = new ServerManager();
            foreach (Site site in manager.Sites)
            {
                foreach (Application app in site.Applications)
                {
                    string path = app.Path;
                    path = path.Replace("/", " ");
                    path = path.Trim();

                    if (path.ToLower() == VDName.ToLower())
                    {
                        AppPoolName = app.ApplicationPoolName;
                        break;
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

c# iis-7

4
推荐指数
1
解决办法
6853
查看次数

如何强制ASP.Net无效(从而重新加载)当前的应用程序实例?

基本上我想要在编辑web.config文件时会发生的效果.该应用程序基本上完全卸载并重新启动,从而重新启动Application_Start,并且还放弃由现已解散的AppDomain创建的任何动态创建的类型.

编辑

我需要在我的Web应用程序中的C#代码中执行此操作.我知道可以做到; 我很久以前就这么做了,但后来丢失了代码并忘记了我是怎么做到的.

asp.net

3
推荐指数
1
解决办法
1517
查看次数