我使用asp:Timer控件每隔10秒轮询一次服务。
我知道计时器正在工作,好像我注释掉了服务电话,时间将完全更新面板。
然而,当启用服务调用时,计时器将正确更新面板几次,但随后它将开始挂起。
我认为这是由于服务方面的瓶颈,但服务只是返回一个项目列表。
以下是每个级别的代码:
ASP.Net
<asp:UpdatePanel ID="pnlProjectList" runat="server">
<ContentTemplate>
<asp:Timer id="updateTimer" Interval="10000" runat="server"
ontick="updateTimer_Tick">
</asp:Timer>
背后的C#页面代码
public partial class Controls_ProjectList : System.Web.UI.UserControl, IProjectListView
{
ProjectListPresenter presenter;
protected void Page_Load(object sender, EventArgs e)
{
presenter = new ProjectListPresenter(this);
if (!IsPostBack)
{
presenter.GetProjects();
lbUpdateTime.Text = "Updated at " + DateTime.Now.ToLongTimeString();
}
}
public ProjectTable ProjectList
{
set {
dlProjectList.DataSource = value.Projects;
dlProjectList.DataBind();
}
}
protected void updateTimer_Tick(object sender, EventArgs e)
{
try
{
presenter.GetProjects();
lbUpdateTime.Text = "Updated at " + DateTime.Now.ToLongTimeString();
}
catch (TimeoutException ex)
{
}
}
}
任何人都可以告诉我A)我做错了什么或B)做我想做的事情的最佳做法。
感谢。
答案 0 :(得分:1)
可以归结为任何数量的东西。尝试使用Trace Viewer更详细地分析WCF通信,并找出遇到错误的时间和地点。
在.config文件中,您可以添加块。要启用跟踪,只需添加dignostics块,并在运行应用程序时在指定位置生成跟踪文件。这应该使您能够更深入地解决问题。
可以找到跟踪查看器:
(“C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \ SvcTraceViewer.exe”)
跟踪查看器使用情况的信息: http://msdn.microsoft.com/en-us/library/aa751795.aspx
答案 1 :(得分:0)
我解决了这个问题。
基本上,每次调用Tick事件时,页面加载事件都被触发,这意味着它正在创建一个新的演示者。每个新的演示者都在创建一个与服务的新连接,并且没有任何连接被关闭,因此它使服务超载。
现在我有一个函数来关闭每个方法调用服务后调用的连接。