【问题标题】:Is it feasible to setup a WCF Service and an ASP.Net site so that they both use the same common DLL?设置 WCF 服务和 ASP.Net 站点以便它们都使用相同的通用 DLL 是否可行?
【发布时间】:2015-02-09 05:55:49
【问题描述】:

我所说的通用 DLL 是指在运行这两者的服务器的文件系统上,只有一个 DLL 由服务和站点共享。

目标是 DLL 将拥有自己的 App.config 文件,这样当服务访问 DLL 并要求配置中的设置时,以及当网站访问 DLL 要求相同的设置时,这些设置将总是互相匹配。

我想如果服务使用同一个 DLL 的不同副本和 App.config 的不同副本,那么服务的 DLL 的配置可能与网站的 DLL 的配置不匹配。我试图通过只有一组 DLL 和它在服务器上的配置来确保完整性。

这是一个可行的目标吗?

我知道我必须在 DLL 中编写特定代码,以确保它不会读取任何 Web.config,但这似乎还不错。还有其他我没有想到的问题吗?

【问题讨论】:

  • 嗯,在文件系统上共享 DLL 就像在 GAC 中注册一样简单。在我需要具有旧库的应用程序需要引用我需要的旧版本的 DLL(更具体地说是 log4net)之前,我曾经有过这种情况。但是,据我所知,当您引用 DLL 时,它引用了需要它的应用程序的 *.config
  • 我想我可以使用ExeConfigurationFileMapAssembly.GetExecutingAssembly().Location 混合使用来获取位于同一文件夹中且与DLL 同名的配置。
  • 如何将 *.config 设置为每个应用程序的指定位置。 blogs.msdn.com/b/suzcook/archive/2003/06/02/57160.aspx AppDomainSetup.ConfigurationFile 似乎是一种方法。我可能会让两个应用程序都为文件位置引用一个数据库,这样你就可以让它动态引用文件路径
  • DLL 不使用自己的配置文件。他们使用应用程序的配置文件(app.config 或 web.config)。我不确定您要在这里解决什么问题。
  • @CoreyOgburn - 如果你有一个封装你的服务的 DLL,你应该能够通过适当的配置文件公开 SOAP 和 REST 端点,而不必做一堆箍跳。您期望什么设置需要更改?它是<system.serviceModel><appSettings> 还是其他东西的一部分?

标签: asp.net wcf


【解决方案1】:

首先,为什么要共享同一个物理程序集?没有任何好处,and quite a few drawbacks。即使程序集包含非特定于应用程序的通用函数,每个应用程序都应该引用它自己的程序集本地实例。

其次,不,在运行时设置 DLL 配置共享是不可行的(除了滥用 machine.config)。即使您 GAC 共享程序集(如果您绝对必须共享它,建议使用),程序集仍然在加载它的应用程序域的上下文中执行,并且每个应用程序域都有自己的配置。

理想的方法是将程序集打包为 NuGet 包,然后您可以通过包含 configuration template as part of the package 轻松管理共享配置要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2011-05-28
    • 2019-11-02
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    相关资源
    最近更新 更多