虽然看起来这已被问了很多次,但这里有一个令人讨厌的扭曲...获取global.asa的子Application_OnStart中的本地IP地址?
首先,我正在调用同一本地系统上的网页的桌面应用程序。这个Web应用程序然后调用第二个服务器(在本地网络中)并需要将它自己的IP地址传递给另一个服务器。很容易,当然:Request.ServerVariables("LOCAL_ADDR")
,我完成了...
它不会在这种情况下工作...本地Web应用程序的代码是用传统ASP编写的,几乎每个源文件都是加密的,因此我不能修改它的代码。我所能解决的只有global.asa文件。在global.asa的Application_OnStart事件中,是Application("InternalIp") = "172.22.14.59"
行,事实上,这是本地IP地址,硬编码...此应用程序设置在代码的其余部分用于引用IP地址。
但是,我的本地网络中的IP地址每天都会改变,所以我每天都需要修改global.asa以包含我的新IP地址。我可以编写一个小应用程序,它会在启动时每天为我修改global.asa,但我更愿意看到一个解决方案,其中global.asa足够聪明,可以检测到这个IP地址本身!
不幸的是,IP地址必须在应用程序的开始处知道,而不是在会话开始时,否则我可以在Session_OnStart事件中使用Application("InternalIp") = Request.ServerVariables("LOCAL_ADDR")
。试过这个,应用程序崩溃了,所以它不会工作。
但是Application_OnStart中的那行代码将不起作用,因为Request在当时是未知的,因此也会崩溃。 (试了一下,没有工作...)
所以,我的局限是我需要以可靠的方式获取global.asa的Application_OnStart事件中的IP地址。不,使用DNS名称也不起作用。 (也试过了,没有工作。)我有什么选择?
由于没有会话,Application_Onstart无法通过会话变量访问服务器变量。最大的问题是代码是依靠这个IP地址在会话开始之前设置的... – 2011-06-03 13:52:17
您也可以尝试使用microsofts serverxmlhttp对象来执行GET以http://automation.whatismyip.com/n09230945.asp 这会给你你的外部IP地址。我不知道你是否可以在application_onstart()中瞬时化serverxmlhttp对象,但是... 请看http://msdn.microsoft.com/en-us/library/ms766431(v=vs.85).aspx获取更多信息。 – 2011-06-03 14:40:58
只允许访问互联网。不幸的是,这是一个IntrAnet应用程序,外部世界很可能被阻止。 – 2011-06-06 08:31:36