我来到这里寻求你的帮助。对于SignalR来说,我是一个相当新的人,经过几天的阅读和一次又一次的重试,我已经走到了尽头。开门见山。 我有一个解决方案,其中包括几个项目。给我带来麻烦的是Web和类库。 我在Web项目中安装了SignalR,在类库中安装了SignalR Client。 我的目标是跟踪和监视在类库中运行的长时间运行进程的进度。我从网络上正确地使用SignalR。 这是我想要调用的Hub方法:
public void SendProgress(string progressMessage, int progressCount, int totalItems)
{
var percentage = (progressCount * 100) / totalItems;
Clients.All.sendProgress(progressMessage, percentage + "%");
}
此外,我在类库(ImportProcess)中有一个方法,它包含一个foreach循环。在那个foreach循环里面我打电话:
public void SendProgress(string message, int currentItem, int totalItems)
SendProgress的主体是:
public void SendProgress(string message, int currentItem, int totalItems)
{
var hubConnection = new HubConnection("http://localhost:13310/");
IHubProxy statementsHubProxy = hubConnection.CreateHubProxy("statementsHub");
hubConnection.Credentials = CredentialCache.DefaultNetworkCredentials;
hubConnection.Start().Wait();
statementsHubProxy.Invoke("SendProgress", message, currentItem, totalItems);
}
问题在于,由于我在foreach中调用SendProgress,我认为每次调用SendProgress时定义连接都是错误的。 我尝试将Connection属性包含在类的构造函数中。它工作但它只返回foreach的第一次迭代而忽略了所有其他的迭代。
我必须提一下,如果我在SendProgress方法中有连接属性,代码可以工作,我在cosnole中收到我想要的信息,但是我认为它不应该是那样的
这是调用休息服务的MVC控制器,休息服务又调用类库
public JsonResult AProcess()
{
_dataImportService.DataImportProcess("2018-02-27", "2018-02-28", "This is another parameter");
return Json("", JsonRequestBehavior.AllowGet);
}
请忽略DataImportProcess的参数,因为它们此时无关紧要。
这是我的Startup.cs
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
我正在使用SignalR 2.2.2
编辑#1 我再次将连接属性包含在类的构造函数中:
static IHubProxy _proxy { get; set; }
public ImportClass()
{
var hubConnection = new HubConnection("http://localhost:13310/");
hubConnection.Credentials = CredentialCache.DefaultNetworkCredentials;
IHubProxy statementsHubProxy = hubConnection.CreateHubProxy("statementsHub");
_proxy = statementsHubProxy;
hubConnection.Start().Wait();
}
但没有运气。 SendProgress方法根本不发送任何更新。
非常感谢任何帮助。 最好的祝福, 康斯坦丁诺。