我的网络应用程序中有一个工人类,我想知道代码是在我的笔记本电脑的开发服务器上还是在生产服务器上运行。注意:代码运行时没有请求处理,因此HttpContext.Current.Request.IsLocal
将无效。
如何检测代码的运行位置?
答案 0 :(得分:1)
调试标志可以是一个选项:
#if (!DEBUG)
// code that shouldn't run while debugging
#endif
我经常亲自发现那些有点不直观,但无法在任何客观意义上真正量化为什么。虽然如果您可能在Release中运行应用程序(可能作为一种冒烟测试)而不想让代码运行,那可能是个问题。
一般认为环境之间的唯一区别应该是配置(毕竟,Web.config
的用途),然后您可以使用配置标志手动实现相同的结果。简单的事情:
<add key="runBackgroundWorker" value="true" />
在代码中你会根据它设置一些标志(可能是对配置的直接引用,可能是静态加载的配置对象,但是你通常处理你的配置)并使用与上面基本相同的条件: / p>
// for example...
var runBackgroundWorker = bool.Parse(ConfigurationManager.AppSettings["runBackgroundWorker"]);
// though perhaps put in more error checking, etc.
// later...
if (runBackgroundWorker)
{
// code that shouldn't run while debugging
}
这使您可以更灵活地在任何环境中打开和关闭该功能,无论是调试还是发布版本。 (QA,UAT,演示环境等)
答案 1 :(得分:0)
如果您的本地服务器没有更改,生产服务器也不能在工作类中对Environment.MachineName
进行比较。
类似的东西:
var devServer = "myMachineName";
var currentServer = Environment.MachineName;
if(devServer == currentServer)
{
/// local dev machine
}