.net - ASP.NET 忘记 bin 目录中的 dll

标签 .net asp.net iis

我们在 WCF 服务上有一个插件系统,用于检查放置在 bin 文件夹中的库的某些程序集级别属性并加载它们。这允许根据发出调用的客户端来定制某些服务调用。这在大多数情况下都非常有效。但是,有时似乎会丢失 dll,这会导致服务恢复为每个客户端的默认实现。到目前为止的解决方案是将 dll 文件移出 bin 文件夹,然后再移回。这会导致 asp.net 拾取该文件,并且自定义项会再次开始工作。

我不明白为什么在一段时间后装配会像这样错过。关于可能导致此问题的任何想法?

编辑:问题陈述得更清楚

我们的服务使用服务工厂根据客户端调用代码的方式来分发自定义实现。如果没有自定义实现,我们会提供默认实现。我们使用 GetAssemblies 来检查用属性修饰的程序集,该属性将它们指定为自定义实现并将它们与客户端关联。问题是 GetAssemblies 停止返回客户端的自定义程序集,即使库保留在 bin 文件夹中也是如此。将 dll 从 bin 中移出,然后放回其中,可以在大约一周内解决该问题,直到再次发生该问题

最佳答案

您遇到的问题一定与应用程序域的自动回收有关。显然,appdomain 回收的行为与真正的重新启动不同。在回收时,它只会加载显式引用并根据需要加载的 dll。请参阅此链接 http://www.chrisvandesteeg.nl/2006/06/15/appdomain-recycle-different-from-real-restart/

事实上,GetAssemblies 只会返回当前加载到应用程序域中的程序集,这可以解释您的程序出现的异常情况。为了安全起见,如果您正在处理插件类型库,您应该始终扫描插件文件 (dll) 并使用 Assembly.LoadFrom 显式加载它们。另一种替代方法是将 WCF 服务托管在自定义主机(例如窗口服务)中,以便主机的生命周期不受 IIS 回收策略的约束。

阅读此内容以获取有关应用程序域回收的更多信息 http://blogs.msdn.com/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx

关于.net - ASP.NET 忘记 bin 目录中的 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2440499/

相关文章:

c# - 使用 JasperReports Server API 从运行报告中检索 PDF

javascript - 在 ASP.NET 中使用 jquery 进行 AJAX 调用时有哪些最佳实践?

ASP.NET - Serilog - 多个接收器,每个接收器用于不同的用途

c - ISAPI扩展

c# - 在 .NET 应用程序中处理大型数组的性能

c# - "' 表格1 ' already defines a member called ' .ctor ' with the same parameter types "

c# - 在 CellTemplate 中为 ListView 创建触发器? (一般与模板混淆)

c# - Linq 返回字符串数组

asp.net-mvc-3 - 每次更改一行 CSS 时,是否都需要重新部署到开发盒上的 IIS Express?

ios - 无法在 IIS 7 中的 iOS 7 上部署应用程序