2015-02-11 3 views
-1

Я хочу прочитать информацию о веб-сервисах, особенно адрес iis. Для IIS7 я могу прочитать следующую информацию с этим кодом.Можно ли получить адрес asp.net в Интернете от IIS

var iisManager = new ServerManager(); 
sites = iisManager.Sites; 

foreach (var site in sites) 

{ 
    IISService serv = new IISService(); 

    serv.Name = site.Name; 
    serv.State= site.State.ToString(); 
    serv.PhysicalPath= site.Applications["/"].VirtualDirectories[0].PhysicalPath; 

allServices.Add(serv); 

}

Для II6

DirectoryEntry IIsEntities = new DirectoryEntry(Path); 

foreach (DirectoryEntry IIsEntity in IIsEntities.Children) 
{ 
    if (IIsEntity.SchemaClassName == "IIsWebServer") 
    { 
     yield return new Website 
     (
      IIsEntity.Properties["ServerComment"].Value.ToString(), 
      GetPath(IIsEntity), 
      (ServerState)IIsEntity.Properties["ServerState"].Value 

     ); 
    } 
} 

Я могу читать выше информацию, но я хочу, чтобы прочитать информацию о конечной точке ASMX веб-службы. Thats like: http://localhost:8091/Service1.asmx

Возможно ли прочитать номер порта или имя файла asmx?

+0

Нет, это невозможно, поскольку они могут быть anythere вне Пути. Вы должны найти файл конфигурации. – VMAtm

+0

Я могу найти файл Service1.asmx, когда я прошу * .asmx с Directory.GetFiles в PhysicalPath. На самом деле для меня достаточно информации о номере порта. –

+0

Порт является административной опцией, не соответствующей файлам на диске. – VMAtm

ответ

3

Nope. IIS не имеет к этому никакого отношения. IIS касается только операций, связанных с хостингом, и запросов на обслуживание. Если вы говорите об услугах, вы можете посмотреть, как сделать ваши услуги доступными, подвергая метаданные и WSDL. Однако это не приведет к показу какого-либо файла или каких-либо «внутренних» сервисов ... просто интерфейс (информация, связанная с публикой) ... например, если у вас есть служба RESTful, физические файлы позади нее не будут отображаться.

+0

Я могу построить локальные адреса со связующей информацией, посмотреть мой ответ. –

+1

@AhmetArslan, в чем ваш смысл? Вы потеряли меня уже – Leo

+0

Можете ли вы проверить мой ниже ответ? –

-1

Я прошу IIS для локальных адресов, чтобы я мог получить достаточную информацию, чтобы сформировать адрес asmx local web.

foreach (var site in sites) 
{ 
    IISService serv = new IISService(); 

    serv.Name = site.Name; 
    serv.State= site.State.ToString(); 
    serv.PhysicalPath= site.Applications["/"].VirtualDirectories[0].PhysicalPath; 

    System.Net.IPEndPoint endP = site.Bindings[0].EndPoint; 

    string protocol = site.Bindings[0].Protocol; 

    allServices.Add(serv); 
} 

Я могу получить Связывающую информацию с этим решением (порт и протокол). I может найти файл Service1.asmx, когда я запрашиваю * .asmx с Directory.GetFiles в PhysicalPath. Поэтому я получаю необходимую информацию для создания адреса веб-сервисов.

//What I need http://localhost:8091/Service1.asmx 

string adress = protocol + "://localhost:" + endP.Port + "/" + " *.asmx file from PhysicalPath"; 
+1

Вы просто читаете файл, как это связано с IIS? – VMAtm

+0

Получение информации привязки связано с IIS. Я просто нахожу файл, чтобы объединить их, что решило мою проблему. Поэтому я хотел сообщить вам о возможном решении. –

+0

Это не сработает, если ваш код не имеет таких привилегий для чтения файлов в определенной папке. Или служба размещается в папке по умолчанию, отличной от IIS. – VMAtm