是否有可能从IIS获取asp.net网络地址
我想阅读来自iis的web服务信息,特别是地址。 对于IIS7,我可以使用此代码阅读以下信息。是否有可能从IIS获取asp.net网络地址
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文件的名称?
没有。 IIS与它无关。 IIS只关心与托管相关的操作和服务请求。如果您正在讨论服务,那么您可能需要考虑如何让您的服务可以被发现,从而暴露元数据和WSDL。但是,这不会暴露任何文件或服务的任何“内部”......只是接口(面向公众的细节)......例如,如果您有一个RESTful服务,它后面的物理文件将不会公开。
我可以用绑定信息构建本地地址,看看我的答案。 – 2015-02-11 09:51:43
@AhmetArslan你的观点是什么?你已经输了我 – Leo 2015-02-11 10:29:23
你可以检查我的下面的答案吗? – 2015-02-11 10:38:31
我问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时,I 可以找到Service1.asmx文件。所以我得到需要的信息来构建Web服务地址。
//What I need http://localhost:8091/Service1.asmx
string adress = protocol + "://localhost:" + endP.Port + "/" + " *.asmx file from PhysicalPath";
不,这是不可能的,因为它们可以是路径之外的任何地方。你必须找到配置文件。 – VMAtm 2015-02-11 08:41:28
当我询问PhysicalPath中的Directory.GetFiles * .asmx时,可以找到Service1.asmx文件。其实端口号对我来说是足够的信息。 – 2015-02-11 08:45:13
端口是一个管理选项,不对应磁盘上的文件。 – VMAtm 2015-02-11 11:15:51