2011-03-15 79 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地址。希望這個邏輯能夠幫助那裏的人。