2011-03-15 81 views
1

我已经创建了一个基于Web的应用程序,用户可以通过该应用程序更改服务器(托管Web应用程序的位置)IPAddress。更改服务器IP地址并自动执行重定向

问题是,一旦我将IP地址更改为新的IP地址,Response.Redirect(“MyHome.aspx”)不再工作。我也尝试将用户重定向到最新更新的地址,但即使这样也不行。一段时间后,不会显示页面信息。

例如:将Web应用程序在IIS中运行时的url为:http://192.168.0.65/WebDemo/Default.aspx将IP地址更改为192.168.0.66并使用Response.Redirect()方法重定向后,http://192.168.0.65无法访问。

任何改变服务器IP地址和自动重定向到新分配的IP地址的任务?

+0

这听起来像是一件非常危险的事情。您的网络服务器应该绝对不**具有足够的权限来更改IP地址,除非这仅用于学术/内部使用。 – Mat 2011-03-15 10:28:30

+0

你的意思是你想将客户端重定向到另一个主机? – 2011-03-15 10:47:02

+0

Infact我想更改主机地址并将客户端重定向到同一主机的新地址 – 2011-03-15 11:00:19

回答

2

当浏览器发送更改IP地址的请求时,将在客户端和服务器之间创建一个TCP会话。浏览器在该连接上等待响应。

更改服务器的IP地址会中断会话,因此服务器无法通过该链接发回数据。

在实际更改IP地址之前,您需要发送重定向。 (更好:发送页面时使用javascript或元刷新重定向或其他东西。)

0

首先感谢马特的建议。我在这里发布解决方案来帮助其他面临同样问题的程序员。

我已经通过更改我的页面后面的代码中的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是包含图像,表示“重定向请稍候......”并包含其中需要重定向要做出的新的IP地址,一个TextBox一个简单的页面。这些元素的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> 

注意,文本框的文本属性,都会在页面加载事件改变,如下图所示:

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.txtIP.Text = Request.QueryString["ip"]; 
    } 

然后在这个aspx页面中,我创建了一个5秒钟的定时器来重定向到新分配的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地址。希望这个逻辑能够帮助那里的人。