2 つの WCF サービス呼び出しがあります。
[OperationContract]
void ClosePeriod();
[OperationContract]
string GetLogs();
ClosePeriod メソッドは、1 時間かかるストアド プロシージャを実行し、ログ メッセージを生成します。GetLogs メソッドは、ClosePeriod メソッドから生成されたログ メッセージを返します。
ClosePeriod サービス呼び出しを待っている間に、ASP.Net Web ページにログ メッセージを表示しようとしています。
<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 ;
}
ただし、TxtProcessLog テキスト ボックスは、ClosePeriod サービス コールが完了した後に更新されます。私は何か間違ったことをしていますか?他のアプローチを提案してください。