gpt4 book ai didi

c# - SignalR 实时通知不会持续存在于客户端上

转载 作者:行者123 更新时间:2023-11-30 15:38:06 25 4
gpt4 key购买 nike

我正在尝试实现一项功能,用户上传文件,服务器处理文件并向客户端显示有关处理状态的实时通知,例如已验证、已导入等。有一些示例,其中客户端将数据从文本框发送到 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”确实出现了,但后来消失了。

enter image description here

最佳答案

您的 JavaScript 方法有误:

multipleStepsHub.MethodInJavascript = function (status) {
("#lblStatus").val(status);
};

应该是

multipleStepsHub.MethodInJavascript = function (status) {
$('#<%= lblStatus.ClientID %>').text(status);
};

请注意 ASP.NET auto-generates HTML element identifiers .

编辑:如果您不希望页面在上传完成后重新加载,那么您需要异步上传文件。在 HTML5 中,it's pretty easy to achieve .有关如何操作的另一个示例,请参阅 this question .

关于c# - SignalR 实时通知不会持续存在于客户端上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11816838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com