【问题标题】:How to access info about where the WCF service is deployed如何访问有关 WCF 服务部署位置的信息
【发布时间】:2011-09-25 07:16:22
【问题描述】:

我在 IIS7 中托管的多个网站中部署了一项 WCF 服务,有时在 VS2010 中(开发环境)。

通常多个实例连接到同一个数据库,通常它的只读访问权限不是问题,但有时(如在日志记录中)我需要唯一标识访问数据库的服务实例。

目前我通过在 web.config 中添加特殊属性来做到这一点,稍后我将其用作主键的一部分,但我确实觉得它不是理想的解决方案。

如果它托管在 IIS 中,我会考虑站点名称,如果它托管在 VS2010 中,我会考虑机器名称 + 端口。

问题来了:如何访问有关 WCF 服务部署位置的信息以及如何从 C# 中已部署的服务内部以编程方式进行操作?有可能吗?

感谢您的建议。 迈克尔

【问题讨论】:

    标签: c# .net wcf iis-7 hosting


    【解决方案1】:

    前几天有一个关于如何获取 WCF 服务器的 IP 地址以进行日志记录的问题。本主题可能会有所帮助:How to get IP address of WCF web service


    您还可以通过使用System.Diagnostics.Process.GetCurrentProcess() 找出正在运行您的应用程序的进程来确定您是否在 IIS 中运行,并查看它是否是“w3svc.exe”,这是 IIS 应用程序池运行的方式。

    【讨论】:

    • 不幸的是,IP 是不够的,因为许多服务可能使用相同的 IP,或者可能有一个 VM 具有多个 IP 地址,但是感谢您提供的关于进程的想法,这将有助于区分VS 和 IIS。
    【解决方案2】:

    如果我正确理解了您的问题,而我可能没有正确理解,您想知道实际实例部署在服务器上。

    如果是这种情况,您可以使用类似:

     (string)AppDomain.CurrentDomain.GetData("APPBASE") 
    

    或者我相信这也会起作用:

      AppDomain.CurrentDomain.BaseDirectory;
    

    在程序集或进程本身上使用反射将不起作用,因为正在运行的进程是主机(IIS、IISExpress 等),但我指定的两种方法应该为您提供托管应用程序的服务本身的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多