Различные способы получения имени сервера в ASP.NET

Я хочу зарегистрировать свое имя сервера в приложении ASP.NET, я использую несколько серверов и балансировку нагрузки, поэтому мне нужно регистрировать имя сервера.

Но в чем разница между этими способами получения имени сервера?

а какой из них верный или лучше регистрировать?

любая идея?

или любыми другими способами?

System.Environment.MachineName
Server.MachineName
System.Net.Dns.GetHostName()

Есть и другие способы, но не всегда возвращать правильное имя сервера:

Request.ServerVariables["SERVER_NAME"]
System.Net.Dns.GetHostEntry(Request.ServerVariables("SERVER_NAME")).HostName
System.Net.Dns.GetHostEntry(Request.ServerVariables("LOCAL_ADDR")).HostName

person Saeid Alizade    schedule 20.02.2014    source источник
comment
Возможный дубликат балансировки нагрузки IIS и ASP.Net   -  person Rob    schedule 26.06.2019


Ответы (2)


Я знаю, что это старый вопрос. Я искал ответ на тот же вопрос; вот мое решение.

string url = HttpContext.Current.Request.Url.ToString();
string[] tempArray = url.Split('/');
string serverName = tempArray[0] + "/" + tempArray[1] + "/" + tempArray[2] ;

Таким образом вы получите точное имя сервера.

person shreesha    schedule 11.09.2015
comment
Похоже, это даст вам http // subdomain.host.tld [: port]. Например: HttpContext.Current.Request.Url.ToString().Split('/') {string[4]} [0]: "http:" [1]: "" [2]: "localhost:58905" [3]: "default.aspx" - person fortboise; 21.07.2017
comment
И это не имя сервера. Это часть доменного имени, нечто иное. - person Neville; 04.10.2018
comment
Это поможет вам понять, как клиент запрашивает URL-адрес. Это будет работать только в том случае, если URL-адрес запроса совпадает с адресом машины, обслуживающей его. OP сказал, что он находится в режиме балансировки нагрузки, поэтому www.company.com будет отображаться на node004 или node002 или что у вас есть. - person Jun Sato; 02.05.2021

Всегда предпочитаю простые и безотказные решения. Я предлагаю добавить настройку приложения в приложение web.config и вручную заполнить его желаемым именем для каждого сервера.

<appSettings>
  <add key="ServerName" value="Server_1" />
</appSettings>

вы можете прочитать эту настройку позже:

string serverName = ConfigurationSettings.AppSettings["ServerName"];

Таким образом, вы получите полный ручной контроль над именами серверов.

person SinaX    schedule 20.02.2014
comment
Это изменение файла web.config делает этот файловый сервер специфичным. При таком подходе необходимо создать отдельный файл web.config для каждого поддерживаемого сервера. Это увеличивает накладные расходы на обслуживание, которые могут не понадобиться тем, кто обслуживает веб-сайт. - person JohnH; 20.08.2019