我在IIS7中托管的多个网站中部署了一个WCF服务,有时在VS2010中部署(开发环境)。
通常多个实例连接到同一个数据库,并且通常它不是一个问题,因为它是只读访问,但有时(如在日志记录中)我需要唯一地标识访问数据库的服务实例。
目前我是通过在web.config中添加特殊属性来实现的,我将稍后将其用作主键的一部分,但我觉得它不是理想的解决方案。
我想到了site-name,如果它托管在IIS和机器名+端口,如果它是从VS2010托管的。
以下是一个问题:如何访问有关WCF服务部署位置的信息以及如何在c#中从已部署服务内部以编程方式执行此操作?它有可能吗?
感谢您的建议。 米甲
答案 0 :(得分:0)
前几天有一个关于如何获取WCF服务器的IP地址以进行日志记录的问题。本主题可能有所帮助:How to get IP address of WCF web service
您还可以通过查找使用System.Diagnostics.Process.GetCurrentProcess()
运行应用程序的进程来确定您是否在IIS中运行,并查看它是否是“w3svc.exe”,这是IIS应用程序池运行的内容如
答案 1 :(得分:0)
如果我理解你的问题,而我可能没有,你想知道服务器上是否部署了实际的实例。
如果是这种情况,您可以使用以下内容:
(string)AppDomain.CurrentDomain.GetData("APPBASE")
或者我相信这也会奏效:
AppDomain.CurrentDomain.BaseDirectory;
在程序集或进程本身上使用反射将不起作用,因为正在运行的进程是主机(IIS,IISExpress等),但我指定的两个方法应该为您提供托管应用程序的服务本身位置。