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

C# 是否可以从IIS获取asp.net web地址,c#,web-services,iis-7,iis-6,C#,Web Services,Iis 7,Iis 6,我想从iis中读取web服务信息,尤其是地址。 对于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.

我想从iis中读取web服务信息,尤其是地址。 对于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

        );
    }
}
我可以阅读上述信息,但我想阅读ASMXWeb服务的端点信息。 这就像:


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

否。IIS与此无关。IIS只关注托管相关操作和服务请求。如果您谈论的是服务,那么您可能需要考虑使您的服务可发现,公开元数据和WSDL。但是,这不会公开任何文件或服务的任何“内部”…只是接口(面向公众的详细信息)…例如,如果您有一个RESTful服务,它背后的物理文件将不会公开。

我要求IIS提供本地地址,以便成功获得足够的信息来形成asmx本地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);
}
我可以使用此解决方案(端口和协议)获取绑定信息。我 当我在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";

不,这是不可能的,因为他们可能在小路外面。您必须找到配置文件。当我在PhysicalPath中请求带有Directory.GetFiles的*.asmx时,我可以找到Service1.asmx文件。实际上,端口号对我来说已经足够了。端口是一个管理选项,与磁盘上的文件不对应。我可以用绑定信息构造本地地址,看看我的答案。你能检查我下面的答案吗?获取绑定信息与IIS有关。我简单地找到了这个文件,然后将它们组合起来,这就解决了我的问题。因此,我想告诉您可能的解决方案。如果您的代码没有读取特定文件夹中文件的特权,那么这将不起作用。或服务托管在非IIS默认文件夹中。如果我没有运行Active Directory域服务代码的权限,则这些代码无法完全运行。隐私不是问题,因为我说过这解决了我的问题。