我的Web Api适用于来自Web App,Android App和Desktop的CRUD 帖子。
我想将SignalR添加到Web Api,每次调用Controller中的Action Create时,我想通知所有用户Post创建。
问题是,我在Web Api中找不到任何实现,所有实现都在Web App中使用Web Api或类似的东西。我阅读了有关它的所有MSDN文档。我现在正在挣扎3-4天。
我设法达到了实现SignalR的程度,我的服务器没有创建任何我需要从Web App脚本调用的signalr / hubs文件。它仅在我在本地运行应用程序时创建 - 如果我在Azure上发布该文件未创建。
任何人都只有在Web Api中实施的具体步骤?
我试过这个博客,它有Web Api的东西,但在项目中添加了js,并添加了本地html。它不是独立的REST API。
这不是关于不创建signalr / hubs文件。这是关于使用SignalR创建独立的Web Api。
我有创业公司:
public void Configuration(IAppBuilder app) {
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888
app.MapSignalR("/signalr", new Microsoft.AspNet.SignalR.HubConfiguration());
}
我的中心:
public class ServiceStatusHub : Hub {
private static IHubContext hubContext =
GlobalHost.ConnectionManager.GetHubContext<ServiceStatusHub>();
public static void SetStatus(string message) {
hubContext.Clients.All.acknowledgeMessage(message);
}
}
在我的Api Controler中,我打电话给:
ServiceStatusHub.SetStatus("Status changed!");
我制作了控制台应用程序以测试Api,添加了Signal R客户端和类:
class SignalRMasterClient {
public string Url { get; set; }
public HubConnection Connection { get; set; }
public IHubProxy Hub { get; set; }
public SignalRMasterClient(string url) {
Url = url;
Connection = new HubConnection(url, useDefaultUrl: false);
Hub = Connection.CreateHubProxy("ServiceStatusHub");
Connection.Start().Wait();
Hub.On<string>("acknowledgeMessage", (message) =>
{
Console.WriteLine("Message received: " + message);
/// TODO: Check status of the LDAP
/// and update status to Web API.
});
}
public void SayHello(string message) {
Hub.Invoke("hello", message);
Console.WriteLine("hello method is called!");
}
public void Stop() {
Connection.Stop();
}
}
的Program.cs:
var client = new SignalRMasterClient("myUrl.com/signalr");
// Send message to server.
client.SayHello("Message from client to Server!");
我收到500内部服务器错误。
我如何测试我的Web Api signalR肯定能正常工作?
答案 0 :(得分:0)
我看到了一些问题:
1)您不需要集线器中的hubContext字段。你从Hub继承。这个类包含了所有的&#34;客户端&#34;财产。
public class ServiceStatusHub : Hub {
public static void SetStatus(string message) {
Clients.All.acknowledgeMessage(message);
}
}
2)启动服务器时记录错误。
public SignalRMasterClient(string url) {
Url = url;
Connection = new HubConnection(url, useDefaultUrl: false);
Hub = Connection.CreateHubProxy("ServiceStatusHub");
Connection.Start().ContinueWith(task => { if (task.IsFaulted) {
Console.WriteLine("There was an error opening the connection:{0}",
task.Exception.GetBaseException());
} else {
Console.WriteLine("Connected");
}
});
Hub.On<string>("acknowledgeMessage", (message) =>
{
Console.WriteLine("Message received: " + message);
/// TODO: Check status of the LDAP
/// and update status to Web API.
}).Wait();
}
3)检查客户端网址。在创建客户端时,您的路径中不需要信号器。 只是:
var client = new SignalRMasterClient("myUrl.com/");
在这里,您将找到一个运行的样本,它可以满足您的所有需求: SignalR Console app example