我正在尝试使用GetHubContext从另一个项目连接到My SignalR项目,但它不起作用。 代码如下:
第一个项目
[HubName("DataHub")]
public class DataHub : Hub
{
int counter = 1;
public void Hello(String message)
{
Clients.All.addMessage(message);
}
public void getNewData(Dictionary<string,string> s)
{
Object result = new[] { s };
Clients.All.addnothing(result);
}
第二个项目:
class Class1
{
static void Main(string[] args)
{
IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<Tape.DataHub>();
while(true){
Dictionary<string, string> data = new Dictionary<string, string> { };
data.Add("User", "PD");
data.Add("DeviceId","445");
data.Add("ID", "1");
Object result = new[] { data };
hubContext.Clients.All.addData(data);
System.Threading.Thread.Sleep(5000);
}
}
}
}
客户端的 JavaScript 代码
$.connection.hub.url = "http://localhost:57844/signalr";
var dataHub = $.connection.DataHub;
dataHub.client.addData = function (message) {
console.log(message);
var obj = message;
for (var i = 0; i < obj.length; i++)
//loops through the data and adds new data to the html page
}
$.connection.hub.start().done(function () {
console.log("connected");
}).fail(function (error) {
console.log('Invocation of start failed. Error: ' + error)
});
客户端应通过与信号器项目位于不同类上的信号器中心从 class1 获取新数据。但是我没有获得任何新数据,客户端只连接到数据中心。是不是少了点什么?
你有一个控制台项目和一个托管 signalR 的 Web 项目,对吗?这两个将在完全不同的范围(单独的进程、单独的应用程序域)下运行。您只能从 Web 项目调用GetHubContext
,但执行此操作的代码可以位于单独的项目 (Assemly) 中,但不能位于单独的进程/应用程序域中。
如果由于某种原因需要GetHubContext
在单独进程中执行的代码,则需要使用某种集成,如服务总线、WCF 等