Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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 mvc中的客户端连接到外部服务器_C#_Asp.net_Asp.net Mvc 4_Signalr - Fatal编程技术网

C# 信号器:asp.net mvc中的客户端连接到外部服务器

C# 信号器:asp.net mvc中的客户端连接到外部服务器,c#,asp.net,asp.net-mvc-4,signalr,C#,Asp.net,Asp.net Mvc 4,Signalr,我需要在服务器信号器上连接我的web应用程序。Windows Phone应用程序正在访问此服务器,并正常工作。我需要做的是通过Web应用程序访问,并向另一端连接的此phone windows应用程序发送消息 我想通过控制器进行通信,因为必须在网站屏幕上为用户通知任何内容 服务器启动。cs: internal class Startup { public void Configuration(IAppBuilder app) { tr

我需要在服务器信号器上连接我的web应用程序。Windows Phone应用程序正在访问此服务器,并正常工作。我需要做的是通过Web应用程序访问,并向另一端连接的此phone windows应用程序发送消息

我想通过控制器进行通信,因为必须在网站屏幕上为用户通知任何内容

服务器启动。cs:

internal class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            try
            {
                app.UseCors(CorsOptions.AllowAll);

                ConfigureGlobalHost();
                var configuration = new HubConfiguration
                {
                    EnableDetailedErrors = true,
                    EnableJSONP = true
                };

                app.MapSignalR("/signalr", configuration);
            }
            catch (Exception)
            {
                //Log.AddMessage("An error occurred during server configuration: " + ex.Message);
            }
        }

        public void ConfigureGlobalHost()
        {
             GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromMinutes(1);
             GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromMinutes(1);
             GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromMinutes(10);
             GlobalHost.Configuration.DefaultMessageBufferSize = 500;
        }      
public class HubConnectionHelper : IDisposable
{
     public IHubProxy HubProxy { get; set; }
     public HubConnection Connection { get; set; }
     private string _serverURI;

     public HubConnectionHelper(string nomeDoHub, string urlServicoCentral)
     {
         _serverURI = string.Format("http://{0}:8080", urlServicoCentral.Split(':')[0]);

         Connection = new HubConnection(_serverURI);
         Connection.TransportConnectTimeout = TimeSpan.FromMinutes(10);

         Connection.Closed += Connection_Closed;

         HubProxy = Connection.CreateHubProxy(nomeDoHub);
     }
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(ConfiguracaoTerminalViewModel cTerminal)
{
     if (ModelState.IsValid)
     {
          var loja = _lService.ObterLoja();
          if (_cTerminalService.Gravar(new ConfiguracaoTerminal
          {
               Id = Guid.NewGuid(),
               CaminhoServidorEmissao = cTerminal.CaminhoServidorEmissao,
               NumeroEletronico = cTerminal.NumeroEletronico,
               Serie = cTerminal.Serie,
               LojaId = cTerminal.LojaId,
               TerminalId = cTerminal.TerminalId,
               AmbienteNFe = cTerminal.AmbienteNFe
          }))
          {
               await _cTerminalHub.NotificarTerminal(cTerminal.TerminalId.ToString(),
                                              "Configuração inserida com sucesso.\n\nFim das configurações.");
               return RedirectToAction("Index");
          }
     }
     return View(cTerminal);
}
public class ConfiguracaoTerminalHub : Hub, IDisposable
{
    private readonly SignalRConnectionService _signalRConnectionService;
    private readonly TerminalService _terminalService;

    public ConfiguracaoTerminalHub()
    {
        _signalRConnectionService = new SignalRConnectionService();
        _terminalService = new TerminalService();
    }



    public void NotificarTerminal(string connectionId, string message)
    {
        Clients.Client(connectionId.ToString()).ReceberNotificacaoConfiguracaoTerminal(message);
        Console.WriteLine("Notificação enviada do Retaguarda para um terminal pendente.");
    }


    public override Task OnConnected()
    {
        SalvarConexao(Guid.Parse(Context.Headers.Get("terminalId")));
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        ExcluirConexao(Guid.Parse(Context.ConnectionId));
        return base.OnDisconnected(stopCalled);
    }
}

ConnectionHelper:

internal class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            try
            {
                app.UseCors(CorsOptions.AllowAll);

                ConfigureGlobalHost();
                var configuration = new HubConfiguration
                {
                    EnableDetailedErrors = true,
                    EnableJSONP = true
                };

                app.MapSignalR("/signalr", configuration);
            }
            catch (Exception)
            {
                //Log.AddMessage("An error occurred during server configuration: " + ex.Message);
            }
        }

        public void ConfigureGlobalHost()
        {
             GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromMinutes(1);
             GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromMinutes(1);
             GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromMinutes(10);
             GlobalHost.Configuration.DefaultMessageBufferSize = 500;
        }      
public class HubConnectionHelper : IDisposable
{
     public IHubProxy HubProxy { get; set; }
     public HubConnection Connection { get; set; }
     private string _serverURI;

     public HubConnectionHelper(string nomeDoHub, string urlServicoCentral)
     {
         _serverURI = string.Format("http://{0}:8080", urlServicoCentral.Split(':')[0]);

         Connection = new HubConnection(_serverURI);
         Connection.TransportConnectTimeout = TimeSpan.FromMinutes(10);

         Connection.Closed += Connection_Closed;

         HubProxy = Connection.CreateHubProxy(nomeDoHub);
     }
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(ConfiguracaoTerminalViewModel cTerminal)
{
     if (ModelState.IsValid)
     {
          var loja = _lService.ObterLoja();
          if (_cTerminalService.Gravar(new ConfiguracaoTerminal
          {
               Id = Guid.NewGuid(),
               CaminhoServidorEmissao = cTerminal.CaminhoServidorEmissao,
               NumeroEletronico = cTerminal.NumeroEletronico,
               Serie = cTerminal.Serie,
               LojaId = cTerminal.LojaId,
               TerminalId = cTerminal.TerminalId,
               AmbienteNFe = cTerminal.AmbienteNFe
          }))
          {
               await _cTerminalHub.NotificarTerminal(cTerminal.TerminalId.ToString(),
                                              "Configuração inserida com sucesso.\n\nFim das configurações.");
               return RedirectToAction("Index");
          }
     }
     return View(cTerminal);
}
public class ConfiguracaoTerminalHub : Hub, IDisposable
{
    private readonly SignalRConnectionService _signalRConnectionService;
    private readonly TerminalService _terminalService;

    public ConfiguracaoTerminalHub()
    {
        _signalRConnectionService = new SignalRConnectionService();
        _terminalService = new TerminalService();
    }



    public void NotificarTerminal(string connectionId, string message)
    {
        Clients.Client(connectionId.ToString()).ReceberNotificacaoConfiguracaoTerminal(message);
        Console.WriteLine("Notificação enviada do Retaguarda para um terminal pendente.");
    }


    public override Task OnConnected()
    {
        SalvarConexao(Guid.Parse(Context.Headers.Get("terminalId")));
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        ExcluirConexao(Guid.Parse(Context.ConnectionId));
        return base.OnDisconnected(stopCalled);
    }
控制器:

internal class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            try
            {
                app.UseCors(CorsOptions.AllowAll);

                ConfigureGlobalHost();
                var configuration = new HubConfiguration
                {
                    EnableDetailedErrors = true,
                    EnableJSONP = true
                };

                app.MapSignalR("/signalr", configuration);
            }
            catch (Exception)
            {
                //Log.AddMessage("An error occurred during server configuration: " + ex.Message);
            }
        }

        public void ConfigureGlobalHost()
        {
             GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromMinutes(1);
             GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromMinutes(1);
             GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromMinutes(10);
             GlobalHost.Configuration.DefaultMessageBufferSize = 500;
        }      
public class HubConnectionHelper : IDisposable
{
     public IHubProxy HubProxy { get; set; }
     public HubConnection Connection { get; set; }
     private string _serverURI;

     public HubConnectionHelper(string nomeDoHub, string urlServicoCentral)
     {
         _serverURI = string.Format("http://{0}:8080", urlServicoCentral.Split(':')[0]);

         Connection = new HubConnection(_serverURI);
         Connection.TransportConnectTimeout = TimeSpan.FromMinutes(10);

         Connection.Closed += Connection_Closed;

         HubProxy = Connection.CreateHubProxy(nomeDoHub);
     }
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(ConfiguracaoTerminalViewModel cTerminal)
{
     if (ModelState.IsValid)
     {
          var loja = _lService.ObterLoja();
          if (_cTerminalService.Gravar(new ConfiguracaoTerminal
          {
               Id = Guid.NewGuid(),
               CaminhoServidorEmissao = cTerminal.CaminhoServidorEmissao,
               NumeroEletronico = cTerminal.NumeroEletronico,
               Serie = cTerminal.Serie,
               LojaId = cTerminal.LojaId,
               TerminalId = cTerminal.TerminalId,
               AmbienteNFe = cTerminal.AmbienteNFe
          }))
          {
               await _cTerminalHub.NotificarTerminal(cTerminal.TerminalId.ToString(),
                                              "Configuração inserida com sucesso.\n\nFim das configurações.");
               return RedirectToAction("Index");
          }
     }
     return View(cTerminal);
}
public class ConfiguracaoTerminalHub : Hub, IDisposable
{
    private readonly SignalRConnectionService _signalRConnectionService;
    private readonly TerminalService _terminalService;

    public ConfiguracaoTerminalHub()
    {
        _signalRConnectionService = new SignalRConnectionService();
        _terminalService = new TerminalService();
    }



    public void NotificarTerminal(string connectionId, string message)
    {
        Clients.Client(connectionId.ToString()).ReceberNotificacaoConfiguracaoTerminal(message);
        Console.WriteLine("Notificação enviada do Retaguarda para um terminal pendente.");
    }


    public override Task OnConnected()
    {
        SalvarConexao(Guid.Parse(Context.Headers.Get("terminalId")));
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        ExcluirConexao(Guid.Parse(Context.ConnectionId));
        return base.OnDisconnected(stopCalled);
    }
编辑:

internal class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            try
            {
                app.UseCors(CorsOptions.AllowAll);

                ConfigureGlobalHost();
                var configuration = new HubConfiguration
                {
                    EnableDetailedErrors = true,
                    EnableJSONP = true
                };

                app.MapSignalR("/signalr", configuration);
            }
            catch (Exception)
            {
                //Log.AddMessage("An error occurred during server configuration: " + ex.Message);
            }
        }

        public void ConfigureGlobalHost()
        {
             GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromMinutes(1);
             GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromMinutes(1);
             GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromMinutes(10);
             GlobalHost.Configuration.DefaultMessageBufferSize = 500;
        }      
public class HubConnectionHelper : IDisposable
{
     public IHubProxy HubProxy { get; set; }
     public HubConnection Connection { get; set; }
     private string _serverURI;

     public HubConnectionHelper(string nomeDoHub, string urlServicoCentral)
     {
         _serverURI = string.Format("http://{0}:8080", urlServicoCentral.Split(':')[0]);

         Connection = new HubConnection(_serverURI);
         Connection.TransportConnectTimeout = TimeSpan.FromMinutes(10);

         Connection.Closed += Connection_Closed;

         HubProxy = Connection.CreateHubProxy(nomeDoHub);
     }
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(ConfiguracaoTerminalViewModel cTerminal)
{
     if (ModelState.IsValid)
     {
          var loja = _lService.ObterLoja();
          if (_cTerminalService.Gravar(new ConfiguracaoTerminal
          {
               Id = Guid.NewGuid(),
               CaminhoServidorEmissao = cTerminal.CaminhoServidorEmissao,
               NumeroEletronico = cTerminal.NumeroEletronico,
               Serie = cTerminal.Serie,
               LojaId = cTerminal.LojaId,
               TerminalId = cTerminal.TerminalId,
               AmbienteNFe = cTerminal.AmbienteNFe
          }))
          {
               await _cTerminalHub.NotificarTerminal(cTerminal.TerminalId.ToString(),
                                              "Configuração inserida com sucesso.\n\nFim das configurações.");
               return RedirectToAction("Index");
          }
     }
     return View(cTerminal);
}
public class ConfiguracaoTerminalHub : Hub, IDisposable
{
    private readonly SignalRConnectionService _signalRConnectionService;
    private readonly TerminalService _terminalService;

    public ConfiguracaoTerminalHub()
    {
        _signalRConnectionService = new SignalRConnectionService();
        _terminalService = new TerminalService();
    }



    public void NotificarTerminal(string connectionId, string message)
    {
        Clients.Client(connectionId.ToString()).ReceberNotificacaoConfiguracaoTerminal(message);
        Console.WriteLine("Notificação enviada do Retaguarda para um terminal pendente.");
    }


    public override Task OnConnected()
    {
        SalvarConexao(Guid.Parse(Context.Headers.Get("terminalId")));
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        ExcluirConexao(Guid.Parse(Context.ConnectionId));
        return base.OnDisconnected(stopCalled);
    }
配置终端集线器(客户端,用于连接):

错误:

 StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1,
 Content: System.Net.Http.StreamContent, Headers:
 {
     Date: Tue, 12 Jan 2016 12:57:51 GMT
     Server: Microsoft-HTTPAPI/2.0
     Content-Length: 0
}

什么是
\u cTerminalHub
,它在哪里初始化?@ZoharPeled它在构造函数中初始化。我要使用与signalr server中的集线器同名的类。这有助于组织通过名称将它们分开,以进行通信。我用代码编辑了问题。
\u conHelper
不应该是
配置终端中心
类的类成员吗?从您提供的代码中,我希望出现空引用异常。@ZoharPeled错误不是空引用异常。。。错误发生在:wait_conHelper.Connection.Start()中;对不起,我想我在这一点上帮不了忙。也许其他人可以帮助你。