在asp.net中如何使用SignalR从客户端计算机获取信息?
How to obtain information from the client computer with SignalR, in asp.net?
我需要你的帮助。原来,通过signalR,我试图从服务器获取客户端计算机的信息,在这种情况下,我想获取客户端计算机的名称。
但事实证明,当有多台计算机时,我从客户端计算机上的计算机获取相同的名称,也就是说,如果我先连接,我会正确获取计算机的名称,但如果我转到另一台计算机,我得到的是第一台连接的 PC 计算机的名称,而不是显示真实计算机的名称。
我的代码来自连接到 windform 应用程序的 Web 应用程序(服务器)。我给你看代码:
$(document).ready(function () {
var myHub = $.connection.myHub;
myHub.client.getNamePC = function (pcName) {
$('#NamePC').val(pcName);
}
$.connection.hub.url = "http://localhost:50684/signalr";
$.connection.hub.start().done(function () {
$('#btnSubmit').click(function (e) {
myHub.server.broadcastMessageToNamePC("Esperando Solicitud Nombre Equipo");
});
}).fail(function (error) {
console.error(error);
});
});
<div>
<input type="text" id="NamePC" />
<input type="submit" id="btnSubmit" value="Get Name PC" />
</div>
在 HUB 文件中:
public void BroadcastMessageToNamePC(string pcName)
{
Clients.All.getNamePC(pcName);
}
在 windform 客户端应用程序中:
public partial class Form1 : Form
{
HubConnection hubConnection;
IHubProxy hubProxy;
public Form1()
{
InitializeComponent();
IncializaSignalR();
hubConnection.Closed += IncializaSignalR;
hubConnection.Start().Wait();
}
private void IncializaSignalR()
{
try
{
String dirServer= "https://ejemplo.cl"
hubConnection = new HubConnection(dirServer + "/signalr/hubs");
hubProxy = hubConnection.CreateHubProxy("MyHub");
CheckForIllegalCrossThreadCalls = false;
hubProxy.On<String>("getNamePC ", (pcName) =>
{
namePc();
hubConnection.Stop();
hubConnection.Closed += IncializaSignalR;
hubConnection.Start().Wait();
}
private string namePc()
{
string NamePC_client= System.Environment.MachineName;
if (hubProxy != null)
{
hubProxy.Invoke("BroadcastMessageToNamePC", pcName);
}
return NamePC_client;
}
目标是,当我打开我在生产站点上发布的网页时,我可以得到我的计算机的名称,这是这项工作的客户端,如果有人知道,您的帮助将不胜感激。
此致。
I want to get the name of the client's computer
通常情况下是不可能的。也许您可以使用 ActiveX 和某种插件来检索它,但通常您无法获取此信息。您可以使用 Javascript 获取有关浏览器或 IP 地址的信息,但无法获取计算机名称。这将是一个安全问题。
我需要你的帮助。原来,通过signalR,我试图从服务器获取客户端计算机的信息,在这种情况下,我想获取客户端计算机的名称。
但事实证明,当有多台计算机时,我从客户端计算机上的计算机获取相同的名称,也就是说,如果我先连接,我会正确获取计算机的名称,但如果我转到另一台计算机,我得到的是第一台连接的 PC 计算机的名称,而不是显示真实计算机的名称。
我的代码来自连接到 windform 应用程序的 Web 应用程序(服务器)。我给你看代码:
$(document).ready(function () {
var myHub = $.connection.myHub;
myHub.client.getNamePC = function (pcName) {
$('#NamePC').val(pcName);
}
$.connection.hub.url = "http://localhost:50684/signalr";
$.connection.hub.start().done(function () {
$('#btnSubmit').click(function (e) {
myHub.server.broadcastMessageToNamePC("Esperando Solicitud Nombre Equipo");
});
}).fail(function (error) {
console.error(error);
});
});
<div>
<input type="text" id="NamePC" />
<input type="submit" id="btnSubmit" value="Get Name PC" />
</div>
在 HUB 文件中:
public void BroadcastMessageToNamePC(string pcName)
{
Clients.All.getNamePC(pcName);
}
在 windform 客户端应用程序中:
public partial class Form1 : Form
{
HubConnection hubConnection;
IHubProxy hubProxy;
public Form1()
{
InitializeComponent();
IncializaSignalR();
hubConnection.Closed += IncializaSignalR;
hubConnection.Start().Wait();
}
private void IncializaSignalR()
{
try
{
String dirServer= "https://ejemplo.cl"
hubConnection = new HubConnection(dirServer + "/signalr/hubs");
hubProxy = hubConnection.CreateHubProxy("MyHub");
CheckForIllegalCrossThreadCalls = false;
hubProxy.On<String>("getNamePC ", (pcName) =>
{
namePc();
hubConnection.Stop();
hubConnection.Closed += IncializaSignalR;
hubConnection.Start().Wait();
}
private string namePc()
{
string NamePC_client= System.Environment.MachineName;
if (hubProxy != null)
{
hubProxy.Invoke("BroadcastMessageToNamePC", pcName);
}
return NamePC_client;
}
目标是,当我打开我在生产站点上发布的网页时,我可以得到我的计算机的名称,这是这项工作的客户端,如果有人知道,您的帮助将不胜感激。
此致。
I want to get the name of the client's computer
通常情况下是不可能的。也许您可以使用 ActiveX 和某种插件来检索它,但通常您无法获取此信息。您可以使用 Javascript 获取有关浏览器或 IP 地址的信息,但无法获取计算机名称。这将是一个安全问题。