C# 信号器:asp.net mvc中的客户端连接到外部服务器
我需要在服务器信号器上连接我的web应用程序。Windows Phone应用程序正在访问此服务器,并正常工作。我需要做的是通过Web应用程序访问,并向另一端连接的此phone windows应用程序发送消息 我想通过控制器进行通信,因为必须在网站屏幕上为用户通知任何内容 服务器启动。cs: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
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()中;对不起,我想我在这一点上帮不了忙。也许其他人可以帮助你。