【问题标题】:Updating webservice, without updating the web.config更新 web 服务,而不更新 web.config
【发布时间】:2012-01-12 22:38:28
【问题描述】:

我在 web.config 文件的 system.web\assemblies 部分添加了一个带有程序集的 web 服务:

<add assembly="MyWebservice, 
    Version=1.0.0.36211, 
    Culture=neutral, 
    PublicKeyToken=b9f7c69b7e2ca2dc" />

问题是,如果我发布更新,配置文件也必须更新,即使没有任何变化,但那一行中的版本号。这让运行此服务并想要更新的人感到头疼。他们可能将服务安装在同一台服务器上的多个不同位置,并具有自己的个人定制。更新迫使他们浏览所有文件夹并更新这个文件。有可能在代码中做到这一点吗?由于我已经定义了一些 IHttpHandlers,因此 Dll 在配置中列出。这是一个用 C# 编写的 .NET 4 Web 服务。

【问题讨论】:

  • 完全删除Version=还能用吗?

标签: c# asp.net .net web-services


【解决方案1】:

出于这个原因,我们总是从程序集条目中排除版本、文化和 publickeytoken。有一些 DLL 需要这个,主要是为了获得许可,但在你的情况下,它应该可以很好地删除这些信息。

您应该可以将其更改为:

<add assembly="MyWebservice"/>

我们也对添加到项目的程序集(我们手动编辑 csproj 或 vbproj 文件)和 licenses.licx 执行相同的操作,除非组件供应商特别需要版本。

【讨论】:

  • 这不是让DLL被切换出去,会导致漏洞吗?我的意思是安全性可能是也可能不是用户的一个因素。
  • 我很确定 .NET 会尝试使用您提供的信息解析 DLL。意思是,你可以给它一个公钥,但不能指定版本号。这仍然是相当安全的,因为公钥令牌即使不是不可能更改也很难。
  • 如果 GAC 中有多个版本的 DLL,这会导致问题,对吧?还是我的服务只是在编译期间寻找它绑定的那个?
  • 哦,如果您将 Web 服务安装到 GAC,那么我相信这会导致问题,但我们从未安装到 GAC,所以我不确定它的作用。我的猜测是它会在编译时查找引用的版本,但我不是 100% 确定这一点。
【解决方案2】:

当然,试试这个:

<add assembly="MyWebservice, Culture=neutral, PublicKeyToken=b9f7c69b7e2ca2dc"/>

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多