یک hub را داخل یک پروژه دیگر از نوع class library قرار دادم و با ارجاع به یک کنسول که selfhost شده، میخواستم ازش استفاده کنم، کار نمیکند. به همین سادگی!
کد hub
[HubName("messageHub")]
public class MessageHub : Hub
{
public void NotifyAllClients()
{
Clients.All.Notify();
}
}
کلاس startup
public partial class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
var hubConfiguration = new HubConfiguration()
{
EnableDetailedErrors = true
};
appBuilder.MapSignalR(hubConfiguration);
appBuilder.UseCors(CorsOptions.AllowAll);
}
}
نقطه آغازین برنامه:
static void Main(string[] args)
{
const string baseAddress = "http://localhost:9000/"; // "http://*:9000/";
using (var webapp = WebApp.Start<Startup>(baseAddress))
{
Console.WriteLine("Start app...");
var hubConnection = new HubConnection(baseAddress);
IHubProxy messageHubProxy = hubConnection.CreateHubProxy("messageHub");
messageHubProxy.On("notify", () =>
{
Console.WriteLine();
Console.WriteLine("Notified!");
});
hubConnection.Start().Wait();
Console.WriteLine("Start signalr...");
bool dontExit = true;
while (dontExit)
{
var key = Console.ReadKey();
if (key.Key == ConsoleKey.Escape) dontExit = false;
messageHubProxy.Invoke("NotifyAllClients");
}
}
}
اگر کلاس hub را به داخل پروژهی slefhost منتقل کنم، کار میکند. اما در یک class library دیگر خیر.
نگارش دات نت و ارجاعات همه یکسان است. dotnet 4.5
آیا نکته ای جاانداخته شده در این نمونه کد؟