Volevo creare un servizio Windows che fornisca alcuni servizi tramite API Web ASP.NET self-host. Inoltre, volevo informare i clienti su alcune modifiche tramite Self-host SignalR. Pensavo che ASP.NET SignalR sarebbe la soluzione perfetta per l'hub di notifica.API Web ASP.NET self-host e SignalR self-host insieme all'applicazione servizio Windows
Quando eseguo entrambi i servizi, non funzionano insieme. Se cancello SignalR, l'API Self-host inizia a funzionare perfettamente. Viceversa: elimina il servizio Windows e SignalR funziona perfettamente.
Non sono sicuro di quale sia il mio problema, è possibile avere un servizio Windows che è auto-ospitato contemporaneamente per asp.net Web API e SignalR ?.
Ho provato entrambi su porte identiche e diverse ma non funziona.
E l'altra domanda, è possibile avere entrambi sullo stesso porto?
miei pacchetti installati:
Microsoft.AspNet.WebApi.SelfHost
Microsoft.AspNet.SignalR.SelfHost
Microsoft.AspNet.WebApi.Owin
Microsoft.Owin.Host.HttpListener
Microsoft.Owin.Hosting
Microsoft.Owin.Cors
mio codice
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.SelfHost;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;
using Microsoft.Owin;
[assembly: OwinStartup(typeof(WindowsService_HostAPI.Startup))]
namespace WindowsService_HostAPI
{
partial class SelfHostService : ServiceBase
{
IDisposable SignalR;
EventLog myLog = new EventLog();
private const string appId = "MYHUB";
public SelfHostService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
myLog.Source = "MY HUB ";
var config = new HttpSelfHostConfiguration("http://localhost:9090");
config.Routes.MapHttpRoute(
name: "API",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
HttpSelfHostServer server = new HttpSelfHostServer(config);
string CertLocation = "";
server.OpenAsync().Wait();
try
{
myLog.WriteEntry("Notification HUB Start ");
}
catch (Exception ex)
{
myLog.WriteEntry("Notification Failed TO Start : " + ex.Message + " |||| " + CertLocation);
}
// SignalR
string url = "http://localhost:9191";
SignalR = WebApp.Start(url);
}
protected override void OnStop()
{
// TODO: Add code here to perform any tear-down necessary to stop your service.
try
{
push.StopAllServices(true);
SignalR.Dispose();
}
catch (Exception ex)
{
myLog.WriteEntry("Notification Failed TO Stop : " + ex.Message);
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
public class UserGroupNotification : Hub
{
public void Send(string UGID, string message)
{
Clients.All.addMessage(UGID, message);
}
}
}
http://www.codeproject.com/Articles/869223/ASP-NET-Web-Api-Create-a-Self-Hosted- OWIN-Based-We –