ユーザーがファイルをアップロードし、サーバーがファイルを処理し、検証済み、インポート済みなどの処理ステータスに関するリアルタイム通知をクライアントに表示する機能を実装しようとしています。クライアントがテキストボックスから JavaScript プロキシにデータを送信する例があります。 .
$("#btnTest").click(function () {
myHub.testMethodOnHub($("#txtEmail").val());
});
サーバーがそのデータを処理し、SignalR を使用してクライアントに通知できるように、signalR を介してサーバーにバイナリ データを送信する必要があります。
編集:- aspx.cs から JS メソッドを呼び出して、クライアント側のステータスをリアルタイムに設定することができました。ただし、ページの読み込みが完了すると、メッセージは消えます。
私が試したこと:-
ASPX :-
<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="MultipleStepsUsingSignalR._Default" %>
<script src="Scripts/jquery-1.6.4.js" type="text/javascript"></script>
<script src="Scripts/json2.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-0.5.2.js" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
<body>
<form id="Form1" runat="server">
<p>
<asp:FileUpload ID="fileUpload" runat="server" />
<asp:Button ID="btnProcessFile" runat="server" Text="Process File"
onclick="btnProcessFile_Click" />
<asp:HiddenField ID="hdnConnectionId" runat="server"/>
<%--<asp:Label Text="" ID="lblStatus" runat="server" />--%>
<span id="lblStatus"></span>
</p>
</form>
<script type="text/javascript">
$(document).ready(function () {
var multipleStepsHub = $.connection.multipleStepsHub;
multipleStepsHub.MethodInJavascript = function (status) {
$('#lblStatus').append(status);
};
$.connection.hub.start().done(function () {
$('#<%= hdnConnectionId.ClientID %>').val($.connection.hub.id);
alert($('#lblStatus').text());
});
});
</script>
</body>
ハブ
[HubName("multipleStepsHub")]
public class MultipleStepsHub : Hub
{
public void ExecuteMultipleSteps(string status)
{
}
}
aspx の分離コード
protected void btnProcessFile_Click(object sender, EventArgs e)
{
string connectionId = hdnConnectionId.Value;
var context = GlobalHost.ConnectionManager.GetHubContext<MultipleStepsHub>();
byte[] dataFromPostedFile = GetDataFromUploadedFile(fileUpload.PostedFile.InputStream);
context.Clients[connectionId].MethodInJavascript("<br>File updloaded.");
Thread.Sleep(5000);
context.Clients[connectionId].MethodInJavascript("<br>Processing step1");
Thread.Sleep(5000);
context.Clients[connectionId].MethodInJavascript("<br>Processing step2");
Thread.Sleep(5000);
context.Clients[connectionId].MethodInJavascript("<br>Processing step3");
}
何が期待されますか :- ステータス テキストが「Processing step1」、「Processing step2」、「Processing step3」の順に変化する
結果は何ですか:-
a) 定期的に (Thread.Sleep 後) ステータスに変化がありますが、ページが終了するとステータスは消えます。以下でわかるように、「Processing step1」と「Processing step2」は表示されますが、後で消えます。