Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当从服务器外部访问网站时,ASP.Net页面加载和控制事件触发两次_C#_Asp.net_Iis - Fatal编程技术网

C# 当从服务器外部访问网站时,ASP.Net页面加载和控制事件触发两次

C# 当从服务器外部访问网站时,ASP.Net页面加载和控制事件触发两次,c#,asp.net,iis,C#,Asp.net,Iis,这是一个几个月来让我发疯的问题。它看起来非常复杂,所以我做了一个非常简单的例子来演示它 我有一个使用ASP.Net的网站,托管在microsoft服务器上,使用IIS和SQL server数据库。在本地服务器上调试或从服务器内部访问网站时,网站工作正常 但是,每当我从客户端使用该网站时(当它部署在远程服务器上时,从我的计算机访问它),该网站的页面似乎每次加载两次。意思是: 在第一次加载时,页面加载事件被触发两次 每次触发runat=“server”控件时,页面加载事件和关联的服务器事件都会触发

这是一个几个月来让我发疯的问题。它看起来非常复杂,所以我做了一个非常简单的例子来演示它

我有一个使用ASP.Net的网站,托管在microsoft服务器上,使用IIS和SQL server数据库。在本地服务器上调试或从服务器内部访问网站时,网站工作正常

但是,每当我从客户端使用该网站时(当它部署在远程服务器上时,从我的计算机访问它),该网站的页面似乎每次加载两次。意思是:

  • 在第一次加载时,页面加载事件被触发两次
  • 每次触发runat=“server”控件时,页面加载事件和关联的服务器事件都会触发两次
因此,我制作了一个小网页,托管在同一个网站上,但与它的任何其他网页都没有关联(也不使用Site.Master)。这是:

客户端代码:


服务器端代码:

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用System.IO;
罗莎莉
{
公共部分类TestPostback:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Directory.Exists(Server.MapPath(“Logs”))
CreateDirectory(Server.MapPath(“日志”);
StreamWriter sw=新的StreamWriter(Server.MapPath(“Logs/Trace.txt”),true);
sw.WriteLine(DateTime.Now+“”+getPostBackControlName()+“PageLoad\n”);
sw.Flush();
sw.Close();
}
受保护的无效btnTest\u单击(对象发送方,事件参数e)
{
如果(!Directory.Exists(Server.MapPath(“Logs”))
CreateDirectory(Server.MapPath(“日志”);
StreamWriter sw=新的StreamWriter(Server.MapPath(“Logs/Trace.txt”),true);
sw.WriteLine(DateTime.Now+“”+getPostBackControlName()+“ButtonEvent\n”);
sw.Flush();
sw.Close();
}
//方法返回触发回发的控件的ID
私有字符串getPostBackControlName()
{
...
}
}
如您所见,目标是在每次调用服务器事件方法时写入文件,从而跟踪服务器行为

现在,当我在本地服务器上运行此页面时,或者当我从发布服务器内部访问此页面时,我只需单击一次测试按钮,结果文件如下:

02/10/2018 15:05:44  PageLoad
02/10/2018 15:05:46 btnTest PageLoad
02/10/2018 15:05:46 btnTest ButtonEvent
你可以看到页面被加载,然后我点击按钮触发了回发,并触发了相关事件。对于这个网页来说,这是一个非常好的正常行为

现在,以下是从远程客户端计算机执行完全相同步骤时的结果文件:

02/10/2018 15:36:19  PageLoad
02/10/2018 15:36:20  PageLoad
02/10/2018 15:36:28 btnTest PageLoad
02/10/2018 15:36:28 btnTest ButtonEvent
02/10/2018 15:36:28 btnTest PageLoad
02/10/2018 15:36:28 btnTest ButtonEvent
如您所见,Page_Load和btnTest_Clicked方法会连续触发两次,就像每次调用服务器时都会加载两次网页一样

考虑到代码的简单性,我真的认为这与网站配置或服务器环境有关,但我并不是这方面的专家


我在互联网上搜索了多次解决方案,花了数小时尝试与纯编程相关的东西,但似乎没有任何效果。我迫切需要解决方案。谢谢!

@mbharanidharan88已经找到了这篇文章,但没有找到满意的答案。此外,它没有讨论控制事件,只讨论页面加载(代码是用VB编写的,不是用C#编写的)。因为回发可能有几个原因,其中提到了一些原因。您可以尝试一下……遗憾的是,我已经尝试过了。它没有解释服务器内外的行为差异,这是我遇到的主要问题。无论如何,感谢Chrome开发工具,您可以修改请求并进行分析