我创建了一个基于Web的应用程序,用户可以通过该应用程序更改服务器(托管Web应用程序的位置)IPAddress。
问题是,一旦我将IPAddress更改为新的IPAddress,Response.Redirect(“MyHome.aspx”)就不再起作用了。我也尝试将用户重定向到新更新的地址,但即使它没有做到这一点。一段时间后没有找到找到的页面消息。
例如:Web应用程序在IIS中运行时的URL是:http://192.168.0.65/WebDemo/Default.aspx将IPAddress更改为192.168.0.66并使用Response.Redirect()方法重定向后,http://192.168.0.65无法访问
是否有任何想法可以实现更改服务器IPAddress并自动重定向到新分配的IPAddress的任务?
答案 0 :(得分:2)
当浏览器发送更改IP地址的请求时,会在客户端和服务器之间创建TCP会话。浏览器在该连接上等待响应。
更改服务器的IP地址会中断会话,因此服务器无法通过该链接发回数据。
在实际更改IP地址之前,您需要发送重定向。 (更好:使用javascript或元刷新等方式发送带有定时重定向的页面。)
答案 1 :(得分:0)
首先感谢Mat的建议。我在这里发布解决方案,以帮助其他程序员面临同样的问题。
我已经通过更改我页面后面的代码中的IP地址解决了重定向的问题,让我们说它是http://192.168.0.160/ChangeIp.aspx然后在更改IP地址之后我执行重定向到中间页面让我们将其命名为Redirector。 aspx如下面的代码所示:
// Code presenet in button click handler og ChangeIP.aspx page
protected void btnSaveAndRedirect_Click(object sender, EventArgs e)
{
this.ChangeIPAddress();
// Pass the new IP address via Query String to the Redirector.aspx page
Response.Redirect("Redirector.aspx?ip=" + this.txtIPAddress.Text);
}
Redirector.aspx是一个简单的页面,其中包含一个图像以指示“重定向,请稍候......”和一个TextBox,其中包含需要进行重定向的新IP地址。这些元素的html存在于Redirector.aspx页面中,如下所示:
<body>
<form id="form1" runat="server">
<div>
<table width="100%">
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td class="style1"><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td><img src="Images/Transparent.png" alt="" /></td>
</tr>
<tr>
<td align="center"><img src="Images/Redirect.gif" alt="Please wait while redirecting" /></td>
</tr>
</table>
</div>
<p>
<asp:TextBox ID="txtIP" runat="server"></asp:TextBox>
</p>
</form>
请注意,textbox的text属性在页面加载事件中会发生变化,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
this.txtIP.Text = Request.QueryString["ip"];
}
然后在这个aspx页面中,我创建了一个五秒钟的定时器,重定向到新分配的IP,如下面的代码所示:
<SCRIPT language="JavaScript" type="text/javascript">
<!--
var secs
var timerID = null
var timerRunning = false
var delay = 1000
function InitializeTimer()
{
// Set the length of the timer, in seconds
secs = 5
StopTheClock()
StartTheTimer()
}
function StopTheClock()
{
if(timerRunning)
clearTimeout(timerID)
timerRunning = false
}
function StartTheTimer()
{
if (secs==0)
{
StopTheClock()
// Here's where you put something useful that's
// supposed to happen after the allotted time.
var ip = document.getElementById('<%= txtIP.ClientID %>').value;
window.location.href = "http://" + ip;
}
else
{
self.status = secs
secs = secs - 1
timerRunning = true
timerID = self.setTimeout("StartTheTimer()", delay)
}
}
window.onload = function() {
// Hide textbox from user
document.getElementById('<%= txtIP.ClientID %>').style.display = 'none';
InitializeTimer();
}
//-->
</SCRIPT>
现在,在到达Redirector.aspx页面后,页面会在五秒后自动重定向到新的IP地址。希望这个逻辑可以帮助那些人。