我有两个WCF服务电话:
[OperationContract]
void ClosePeriod();
[OperationContract]
string GetLogs();
ClosePeriod方法运行一个存储过程,该过程需要1个小时,并且它会生成日志消息。
GetLogs方法返回从ClosePeriod方法生成的日志消息。
我在等待ClosePeriod服务调用时试图在ASP.Net网页上显示日志消息。
<asp:UpdatePanel ID="UpdatePanelClosing" runat="server">
<ContentTemplate>
<asp:Timer ID ="TimerLog" runat ="server" Interval ="3000" OnTick="TimerLog_Tick" Enabled="true"></asp:Timer>
<table>
<tr>
<td>
<div style="margin-top: 10px; margin-bottom: 70px">
<asp:Button runat="server" ID="BtnExecuteClosing" Text="Execute" Width="105px" Height="35px" OnClick="BtnExecuteClosing_Click" />
</div>
</td>
</tr>
<tr>
<td>
<p>Process Log:</p>
</td>
</tr>
<tr>
<td colspan="3">
<asp:TextBox ID="TxtProcessLog" runat="server" Width="930px" Height="270" TextMode="MultiLine" Style="resize: none;"
ReadOnly="true" Text="">
</asp:TextBox>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
到目前为止,我尝试异步调用ClosePeriod方法,并尝试使用计时器更新TxtProcessLog文本框。
protected async void BtnExecuteClosing_Click(object sender, EventArgs e)
{
await webservice.ClosePeriodAsync();
}
protected void TimerLog_Tick(object sender, EventArgs e)
{
string log = webservice.GetLogs();
TxtProcessLog.Text = log ;
}
但是,在完成ClosePeriod服务调用后,将更新TxtProcessLog文本框。
难道我做错了什么?请提出任何其他方法。
最佳答案
ClosePeriod会做什么?将许多日志写入数据库表?
然后您的代码应该可以正常工作。
如果“ webservice.GetLogs()”返回string.empty,则不会显示任何内容。
来自UpdatePanel的ClosePeriod调用应该是异步的,否则所有后续调用都将被阻止。
关于javascript - 等待较长的WCF服务调用时如何在asp文本框中显示消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18128304/