标签: appdomain

列出正在处理的AppDomain

是否有可能如何在进程内枚举AppDomains?

.net process appdomain

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

AppDomain和MarshalByRefObject的生命周期:如何避免RemotingException?

当MarshalByRef对象从AppDomain(1)传递到另一个(2)时,如果你在第二个AppDomain(2)中调用方法之前等待6分钟,你将得到一个RemotingException:

System.Runtime.Remoting.RemotingException:对象[...]已断开连接或在服务器上不存在.

有关此问题的一些文档:

如果我错了,请纠正我:如果InitializeLifetimeService返回null,那么当AppDomain 2被卸载时,该对象只能在AppDomain 1中收集,即使收集了代理?

有没有办法禁用生命周期并保持代理(在AppDomain 2中)和对象(在AppDomain1中)保持活动状态,直到代理完成为止?也许与ISponsor ......?

.net c# remoting appdomain object-lifetime

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

如何使AppDomain中的ASP.NET程序集保持活动状态?

场景:我使用Web部署项目部署了一个n层企业ASP.NET应用程序.所有层都生成ASP.NET应用程序使用的独立程序集.

问题:当我运行应用程序时.部署后第一次将相关程序集加载到内存中需要花费大量时间.但一旦加载其照明快速应用程序.如果没有用户访问该应用程序,IIS将从内存中卸载程序集,当用户尝试在以后的实例上访问该应用程序时,它会再次加载所有程序集,并且需要花费相同的时间来加载它这是第一次这样做.

我正在寻找一种解决方案,使我能够将我的程序集加载到内存中,持续覆盖程序集的易变性,以实现内存驻留.

或任何其他解决方案,让我的用户愉快地使用该应用程序解决上述问题.

asp.net iis assemblies appdomain application-pool

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

用AppDomains替换Process.Start

背景

我有一个Windows服务,它使用各种第三方DLL来执行PDF文件的工作.这些操作可能会占用相当多的系统资源,并且在发生错误时偶尔会出现内存泄漏.DLL是围绕其他非托管DLL的托管包装器.

现行解决方案

我已经在一个案例中通过在专用控制台应用程序中包含对其中一个DLL的调用并通过Process.Start()调用该应用程序来缓解此问题.如果操作失败并且存在内存泄漏或未释放的文件句柄,则无关紧要.该过程将结束,操作系统将恢复句柄.

我想将这个相同的逻辑应用到我的应用程序中使用这些DLL的其他地方.但是,我对于在我的解决方案中添加更多控制台项目并编写更多可以调用Process.Start()并解析控制台应用程序输出的样板代码感到非常兴奋.

新解决方案

专用控制台应用程序和Process.Start()的优雅替代方案似乎是使用AppDomains,如下所示:http: //blogs.geekdojo.net/richard/archive/2003/12/10/428.aspx.

我在我的应用程序中实现了类似的代码,但单元测试并不乐观.我在一个单独的AppDomain中创建一个测试文件的FileStream,但不要处理它.然后我尝试在主域中创建另一个FileStream,并且由于未释放的文件锁而失败.

有趣的是,将空DomainUnload事件添加到工作程序域会使单元测试通过.无论如何,我担心可能创建"工人"AppDomains无法解决我的问题.

思考?

代码

/// <summary>
/// Executes a method in a separate AppDomain.  This should serve as a simple replacement
/// of running code in a separate process via a console app.
/// </summary>
public T RunInAppDomain<T>( Func<T> func )
{
    AppDomain domain = AppDomain.CreateDomain ( "Delegate Executor " + func.GetHashCode (), null,
        new AppDomainSetup { ApplicationBase = Environment.CurrentDirectory } );

    domain.DomainUnload += ( sender, e ) => …
Run Code Online (Sandbox Code Playgroud)

c# appdomain .net-3.5 process.start

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

Facebook应用创建应用域错误

我正在尝试创建Facebook应用程序.然而,在创造精灵完成他的工作之后,我遇到了麻烦.

在创建的向导中没有更改任何内容我遇到了错误:

Error
You have specified an App Domain but have not specified a valid integration URL.
secure-citadel-xxxx.herokuapp.com must be derived from one of: Site URL, Mobile
Site URL, Canvas URL, Secure Canvas URL, Page Tab URL or Secure Page Tab URL.
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了它,发现它可能没有答案.

添加http://等等不会产生任何超出域无效的错误.

有谁知道要处理它吗?

facebook appdomain

49
推荐指数
3
解决办法
5万
查看次数

由于AppDomain,在项目之间交叉时,通过Resharper 8测试运行NUnit失败

我最近更新到Resharper 8,当我试图运行一套项目时.这些测试包含两套集成测试,它们都使用IISExpress来运行网站,发出Web请求并检查响应.

单独运行它们是成功的,并且运行所有测试之前会成功.但是,在运行后,第二组运行测试将失败.

调查显示,这AppDomain.CurrentDomain.BaseDirectory是第一次试运行而不是改变.由于集成测试由两个项目组成,这导致第二个项目失败,因为它找不到任何所需的配置文件.

我在Resharper 8中找不到任何禁用这种不同行为的选项,这似乎是/domain:Singlenunit标志的行为.没有降级到Resharper 7,有人知道解决方案吗?它是Resharper 8的预期行为还是一个bug?

c# resharper integration-testing nunit appdomain

48
推荐指数
3
解决办法
7282
查看次数

在.NET 4.0中,如何"沙箱"内存中的程序集并执行方法?

以下是问题的原因:www.devplusplus.com/Tests/CSharp/Hello_World.

虽然之前提出了类似的问题,但网上的许多答案都有几个问题:

  1. 这必须是".Net 4.0"风格,而不是传统模式.
  2. 程序集在内存中,只在内存中,不能写入文件系统.
  3. 我想限制对文件系统,网络等的所有访问.

像这样的东西:

    var evidence = new Evidence();
    evidence.AddHostEvidence(new Zone(SecurityZone.Internet));
    var permissionSet = SecurityManager.GetStandardSandbox(evidence);
Run Code Online (Sandbox Code Playgroud)

到目前为止,我找不到创建AppDomain并加载程序集的方法,该程序集不在文件系统中,而是在RAM中.

同样,上面列出了其他解决方案不起作用的原因:1.许多是4.0之前的版本,而且2.许多人依赖指向文件系统的".Load"方法.

答案2:我有一个汇编引用,因为它是由CSharpCodeProvider类生成的,所以如果你知道一种方法将转换为字节数组,那将是完美的!

显示安全漏洞的示例代码

var provider = new CSharpCodeProvider(new Dictionary<String, String>
    { { "CompilerVersion", "v4.0" } });

var compilerparams = new CompilerParameters
    { GenerateExecutable = false, GenerateInMemory = true, };

var compilerResults = provider.CompileAssemblyFromSource(compilerparams,
    string_Of_Code_From_A_User);

var instanceOfSomeClass = compilerResults.CompiledAssembly
    .CreateInstance(className);

// The 'DoSomething' method can write to the file system and I …
Run Code Online (Sandbox Code Playgroud)

c# security appdomain .net-4.0

47
推荐指数
1
解决办法
8477
查看次数

使用AppDomain的好例子

我在采访中不断被问及AppDomains,我知道基础知识:

  • 它们是应用程序中的隔离级别(使它们与应用程序不同)
  • 他们可以有线程(使它们与线程不同)
  • 一个appdomain中的异常不会影响另一个
  • appdomains无法访问彼此的内存
  • 每个appdomain都可以有不同的安全性

我仍然没有得到使他们成为必要的东西.当你使用一个时,我正在寻找一个合理的具体情况.

回答:

  • 不受信任的代码
    • 核心应用程序受保护
      不受信任的/第三方插件被禁止通过隔离在具有安全限制的单独appdomain中来破坏共享内存和对注册表或硬盘驱动器的非授权访问,从而保护应用程序或服务器.例如ASP.NET和SQL Server托管组件代码
  • 可信代码
    • 稳定性
      应用程序分为安全,独立的特性/功能
    • 架构灵活性
      自由在单个CLR实例或每个程序中运行多个应用程序.

还要别的吗?

.net appdomain

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

如何从主AppDomain卸载程序集?

我想知道如何卸载加载到主AppDomain中的程序集.

我有以下代码:

var assembly = Assembly.LoadFrom( FilePathHere );
Run Code Online (Sandbox Code Playgroud)

当我完成时,我需要/希望能够卸载这个程序集.

谢谢你的帮助.

.net c# appdomain

42
推荐指数
5
解决办法
3万
查看次数

"对象已断开连接或在服务器上不存在"异常

我需要在我的应用程序中使用跨appdomain调用,有时我有这个RemotingException:

对象'/2fa53226_da41_42ba_b185_ec7d9c454712/ygiw+xfegmkhdinj7g2kpkhc_7.rem'已断开连接或在服务器上不存在.

目标对象仍然存在,我已经检查过了.

UPD我在目标对象的终结器中设置断点,它永远不会命中.因此,这个对象是活着的,而不是GC.

.net c# clr appdomain marshalbyrefobject

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