【问题标题】:Get the version of Service hosted in IIS获取 IIS 中托管的服务版本
【发布时间】:2014-08-06 19:49:16
【问题描述】:

我们在 IIS 中托管 WCF 服务。出于跟踪目的,我们需要知道 IIS 中托管的服务版本。

此服务是一套服务的一部分,因此我们实现了所有常见功能(如在公共图书馆中提到的跟踪服务)

尝试使用普通调用获取程序集版本时 Assembly.GetExecutingAssembly()

  • Assembly.GetExecutingAssembly():获取通用库的版本
  • Assembly.GetEntryAssembly(): null
  • Assembly.GetCallingAssembly():获取公共库的版本

我还尝试获取调用堆栈并获取最后一个(获取 IIS 版本)。

有谁知道如何以编程方式获取托管在 IIS 中的 WCF 服务的版本?

【问题讨论】:

  • 您能更好地定义版本的含义吗?

标签: c# .net wcf iis


【解决方案1】:

我假设您需要从 WCF 服务在运行时引用的公共库 dll 中获取 WCF 服务的版本。如果不是,我不明白你为什么要通过运行Assembly.GetExecutingAssembly() 来获得公共库程序集。

如果是这种情况,那么您希望找到包含 IIS 正在运行的 Application 对象的程序集。通过在该根 Application 对象上使用标准反射方法,您应该获得对 IIS 正在执行的 dll 的引用,它应该是 WCF 服务。

Application 类的文档:

http://msdn.microsoft.com/en-us/library/ms525360(v=vs.90).aspx

这看起来是个很有前途的方法:

http://msdn.microsoft.com/en-us/library/system.windows.application.current(v=vs.110).aspx

【讨论】:

  • 你说得对,我需要从公共库中获取 WCF 服务。我将尝试研究此应用程序路径。谢谢
【解决方案2】:

在谈论 WCF 服务的版本时,您更有可能意识到您需要 Web 服务的版本控制,而不是程序集版本,尽管您在问题中混合使用了两者。

程序集版本是实现细节,没有合法的情况需要通过 Web 服务或 IIS 公开此类实现细节。 IIS 本身是部署细节,与 Web 服务的版本无关。

System.Windows.Application 属于 WPF,与 WCF 或 Web 服务无关。

当您学习编程时,您可能已经了解了接口一旦发布就永远不应该更改它,尽管您可以更改实现或引入接口的新版本。 Web 服务基本上是通过 http 绑定的 API 或接口,描述语言通常是用于 SOAP 基础 Web 服务的 WSDL。

简而言之,Web 服务的版本控制是通过 Xml 命名空间完成的,而在 .NET 中,您可以在 XML 命名空间和 CLR 命名空间之间进行映射。在部署期间,您可以在主机中托管同一服务的多个版本,因此旧客户端可以使用旧服务,而新客户端可以使用新版本。因此,您将拥有无缝过渡策略。

程序集版本和服务版本之间没有直接联系,您不应该公开程序集版本,因为客户端说 PHP 或 Java 客户端不知道程序集版本是什么。

有关起点的更多详细信息,如果您在 google 上搜索“Web 服务版本控制”,这里有一些很好的链接: http://www.ibm.com/developerworks/webservices/library/ws-version/ http://www.oracle.com/technetwork/articles/web-services-versioning-094384.html http://msdn.microsoft.com/en-us/library/ms731060(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多