是否可以从IIS获取asp.net web地址

时间:2015-02-11 08:37:42

标签: c# web-services iis-7 iis-6

我想阅读网络服务信息,尤其是来自iis的地址。 对于IIS7,我可以使用此代码阅读以下信息。

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 web服务的终点信息。 这就像 : http://localhost:8091/Service1.asmx

是否可以读取端口号或asmx文件的名称?

2 个答案:

答案 0 :(得分:3)

不。 IIS与它无关。 IIS仅关注与托管相关的操作和服务请求。如果您正在讨论服务,您可能希望查看使您的服务可被发现,公开元数据和WSDL。但是,这不会暴露任何文件或服务的任何“内部”...只是界面(面向公众的详细信息)...例如,如果您有RESTful服务,它背后的物理文件将不会公开。 / p>

答案 1 :(得分:-1)

我要求IIS提供本地地址,以便我能够获得足够的信息来形成asmx本地网址。

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);
}

我可以使用此解决方案(端口和协议)获取绑定信息。一世  当我在PhysicalPath中使用Directory.GetFiles请求* .asmx时,可以找到Service1.asmx文件。所以我得到了构建Web服务地址所需的信息。

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

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