Программно создайте веб-сайт в IIS с помощью C# и установите номер порта

Мне не нравится генерация кода, используемая в большей части ORMs. На самом деле, генерация кода в целом, которую я нахожу, чтобы быть слабым инструментом, который обычно показателен из использования неправильного языка во-первых.

В особенности с отражением .NET, я не вижу потребности в генерале кода в целях ORM.

38
задан Cœur 4 April 2017 в 12:19
поделиться

3 ответа

Если вы используете IIS 7, есть новый управляемый API под названием Microsoft.Web.Administration

Пример из приведенного выше сообщения в блоге:

ServerManager iisManager = new ServerManager();
iisManager.Sites.Add("NewSite", "http", "*:8080:", "d:\\MySite");
iisManager.CommitChanges(); 

Если вы ' Если вы используете IIS 6 и хотите это сделать, это, к сожалению, более сложно.

Вам нужно будет создать веб-службу на каждом сервере, веб-службу, которая обрабатывает создание веб-сайта, потому что прямое олицетворение пользователя по сети не будет работать должным образом (если я правильно помню).

Вы будете должны использовать Interop Services и делать что-то подобное (в этом примере используются два объекта, сервер и сайт, которые являются экземплярами настраиваемых классов, которые хранят конфигурацию сервера и сайта):

string metabasePath = "IIS://" + server.ComputerName + "/W3SVC";
DirectoryEntry w3svc = new DirectoryEntry(metabasePath, server.Username, server.Password);

string serverBindings = ":80:" + site.HostName;
string homeDirectory = server.WWWRootPath + "\\" + site.FolderName;


object[] newSite = new object[] { site.Name, new object[] { serverBindings }, homeDirectory };

object websiteId = (object)w3svc.Invoke("CreateNewSite", newSite);

// Returns the Website ID from the Metabase
int id = (int)websiteId;

Подробнее см. здесь

74
ответ дан 27 November 2019 в 03:17
поделиться
  1. В свойствах сайта выберите вкладку «Веб-сайт» и укажите TCP-порт.
  2. В студии для отладки укажите http: // localhost: / ; на вкладке «Интернет» для «Использовать локальный веб-сервер IIS»
0
ответ дан 27 November 2019 в 03:17
поделиться
[1113536-

Попробуйте следующий код, чтобы узнать неиспользуемый портно

        DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");

        // Find unused ID PortNo for new web site
        bool found_valid_port_no = false;
        int random_port_no = 1;

        do
        {
            bool regenerate_port_no = false;
            System.Random random_generator = new Random();
            random_port_no = random_generator.Next(9000,15000);

            foreach (DirectoryEntry e in root.Children)
            {
                if (e.SchemaClassName == "IIsWebServer")
                {

                    int site_id = Convert.ToInt32(e.Name);
                    //For each detected ID find the port Number 

                     DirectoryEntry vRoot = new DirectoryEntry("IIS://localhost/W3SVC/" + site_id);
                     PropertyValueCollection pvcServerBindings = vRoot.Properties["serverbindings"];
                     String bindings = pvcServerBindings.Value.ToString().Replace(":", "");
                     int port_no = Convert.ToInt32(bindings);

                     if (port_no == random_port_no)
                    {
                        regenerate_port_no = true;
                        break;
                    }
                }
            }

            found_valid_port_no = !regenerate_port_no;
        } while (!found_valid_port_no);

        int newportId = random_port_no;
4
ответ дан 27 November 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: