更改服务器IP地址并自动执行重定向

时间:2011-03-15 10:13:19

标签: c# asp.net

我创建了一个基于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的任务?

2 个答案:

答案 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地址。希望这个逻辑可以帮助那些人。