使用当前请求我可以获取URL主机名:
HttpContext.Current.Request.Url.Host
但是 - 我需要在不使用当前请求(HttpContext.Current
)的情况下确定URL主机名。这样做的原因是我的代码是在onChange回调中从SqlDependency
调用的,当时发现了SQL依赖关系。虽然代码驻留在我的网络应用程序中,但没有请求,HttpContext.Current
为空。
我希望我可以从HttpRuntime
抓住它,但似乎没有什么用处。有没有办法可以获得这些信息?
答案 0 :(得分:7)
如果您是从Web应用程序运行它,并且它是所有托管代码,那么HttpContext必须存在。您的子库(假设您的托管代码位于库中)是否具有对System.Web的引用?如果没有,请考虑添加此引用。从那时起,您应该能够使用完全限定的命名空间直接访问HttpContext:
System.Web.HttpContext.Current.Request.Url.Host
在任何情况下,除非您的代码不受管理或您的上下文真的不是源自Web应用程序,否则HttpContext应该在线程处于活动状态时的每个点都可用。
修改强>
基于阅读下面的评论,听起来像SqlDependency是独立解雇的。虽然它在同一个线程上,但它不是由请求直接触发的。由于您要查找的只是主机网址,因此您可以创建应用程序变量或静态变量来保存此信息,以便在依赖项需要时保存此信息,这并不是不可思议。
我看到的一点是虽然HttpContext.Current
可能无法使用,但HttpContext.Request
可能是{{1}}。这些应该是同一个对象,但它们可能不一定是。可能会在那里找到主机。
答案 1 :(得分:4)
怎么样
Environment.MachineName
答案 2 :(得分:3)
如果您在设置事件处理程序时知道主机,那么您应该可以执行类似的操作(代码未经过实际测试):
string host = HttpContext.Current.Request.Url.Host;
var dep = new SqlDependency(cmd);
dep.OnChange += ((sender, args) =>
{
DoStuff(host);
});
答案 3 :(得分:1)
您应该使用IIS api查询您正在寻找的网站的信息。因为根据IIS配置,您的URL或主机名可能会有所不同。 (想想主机头,端口,协议和这样的东西。
可以在http://learn.iis.net/page.aspx/165/how-to-use-microsoftwebadministration/
找到IIS API简介