asp.net Ajax Timer用于轮询WCF服务

时间:2009-12-03 14:21:32

标签: asp.net ajax wcf

我使用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)做我想做的事情的最佳做法。

感谢。

2 个答案:

答案 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事件时,页面加载事件都被触发,这意味着它正在创建一个新的演示者。每个新的演示者都在创建一个与服务的新连接,并且没有任何连接被关闭,因此它使服务超载。

现在我有一个函数来关闭每个方法调用服务后调用的连接。