Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自宿主ASP.NET Web API和自宿主信号器一起运行windows服务应用程序_C#_Asp.net_Api_Windows Services_Signalr - Fatal编程技术网

C# 自宿主ASP.NET Web API和自宿主信号器一起运行windows服务应用程序

C# 自宿主ASP.NET Web API和自宿主信号器一起运行windows服务应用程序,c#,asp.net,api,windows-services,signalr,C#,Asp.net,Api,Windows Services,Signalr,我想构建一个Windows服务,通过自宿主ASP.NETWebAPI提供一些服务。另外,我想通过Self-host Signal通知客户一些更改。我认为ASP.NET信号器将是通知中心的完美解决方案 当我运行这两个服务时,它们不会一起工作。如果我删除signar,Self-host API将开始完美工作。另一种方法是:删除windows服务,Signal就可以完美地工作 我不确定我的问题是什么,是否有可能同时拥有一个针对asp.net Web API和Signal的自托管windows服务 我在

我想构建一个Windows服务,通过自宿主ASP.NETWebAPI提供一些服务。另外,我想通过Self-host Signal通知客户一些更改。我认为ASP.NET信号器将是通知中心的完美解决方案

当我运行这两个服务时,它们不会一起工作。如果我删除signar,Self-host API将开始完美工作。另一种方法是:删除windows服务,Signal就可以完美地工作

我不确定我的问题是什么,是否有可能同时拥有一个针对asp.net Web API和Signal的自托管windows服务

我在同一个端口和不同的端口上都试过了,但都不起作用

另一个问题是,是否可能在同一个端口上同时使用这两个端口

我安装的软件包:

Microsoft.AspNet.WebApi.SelfHost
Microsoft.AspNet.SignalR.SelfHost
Microsoft.AspNet.WebApi.Owin
Microsoft.Owin.Host.HttpListener
Microsoft.Owin.Hosting
Microsoft.Owin.Cors
我的代码

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);
        }


    }
}

我在我的一个API上运行这样的配置—在同一URI上运行APIController和SignalrHub。我想你的问题是app.mapsigner()的问题

以下是我在配置中的操作方式:

public void Configuration(IAppBuilder appBuilder)
{
    var config = new HttpConfiguration();

    //I use attribute-based routing for ApiControllers
    config.MapHttpAttributeRoutes(); 

    appBuilder.Map("/signalr", map =>
    {
        var hubConfiguration = new HubConfiguration
        {

        };

        map.RunSignalR(hubConfiguration);
    });

    config.EnsureInitialized(); //Nice to check for issues before first request

    appBuilder.UseWebApi(config);
}

这帮助我让我的系统工作。有一点可能会有所帮助:确保将appBuilder.UseWebApi调用放在appBuilder.Map调用之后。从另一方面看,这对我来说并不合适。