【发布时间】:2019-10-31 22:00:22
【问题描述】:
我正在使用托管在 Azure 上的 ASP.NET MVC5 创建一个网站。
我的用户可能会上传视频,我想创建一个进度条或其他内容来指示已完成上传/转码的百分比。
我正在关注此Microsoft tutorial 并且视频已正确上传。
但是,一旦将作业提交到 Azure,它们就会显示这些代码行:
job = job.StartExecutionProgressTask(
j =>
{
Console.WriteLine("Job state: {0}", j.State);
Console.WriteLine("Job progress: {0:0.##}%", j.GetOverallProgress());
},
CancellationToken.None).Result;
我正在尝试调整它以在我的网页上显示它。
问题
但是,我无法“发送”j.GetOverallProgress() 到我的视图。
谁能解释一下如何做到这一点?
到目前为止我做了什么
安装 Microsoft.AspNet.SignalR 包 (v 2.4.1)
(第一次使用 SignalR)
在我的视图中添加这些行:
<script src="~/Scripts/signalR/jquery.signalR-2.4.1.js"></script>
<script src="~/signalr/hubs"></script>
<script type="text/javascript">
$(document).ready(function () {
var hub = $.connection.videoService;
$("#btnCreate").on("click", function () {
hub.client.displayProgress = function (data) {
console.log(data); //Nothing is logged
};
})
});
</script>
我后端的这些行:(\Services 文件夹中的 VideoService.cs)
public class VideoService : Hub
{
public EncodeMyVideo(...)
{
/* [...] */
job = job.StartExecutionProgressTask(j => {
displayProgress(job);
}, CancellationToken.None).Result;
}
public double displayProgress(IJob job)
{
return job.GetOverallProgress();
}
}
在调试模式下,它转到displayProgress 方法,但从不向视图发送任何内容。
顺便说一句,我也试过这个:
public void displayProgress(IJob job)
{
Clients.Caller.displayProgress(job.GetOverallProgress());
}
但我收到此错误:
不支持使用不是由 HubPipeline 创建的 Hub 实例。
我是 SignalR 的新手,尽管有 this SO answer,但我并不真正理解问题所在。
我应该怎么做才能将job.GetOverallProgress(); 发送到我的视图中?
【问题讨论】:
标签: asp.net-mvc azure signalr jobs signalr-hub