我正在为WCF net-tcp服务创建一个安装项目。我遇到的一件事是我需要更改“网站 - >管理应用程序 - >高级设置 - >启用协议”。它也可以使用命令行完成:
%windir%\system32\inetsrv\appcmd.exe set app "[Web Site Name]/[Applicaiton Name]" /enabledProtocols:http,net.tcp
问题在于自定义动作我可以获得[TARGETSITE],但它的值是“/ LM / W3SVC / 2”(我也有[TARGETVDIR])。问题是如何获取网站名称或如何使用[TARGETSITE]设置启用应用程序的协议?
答案 0 :(得分:0)
我结束的解决方案涉及将metabasePath转换为站点名称,然后使用appcmd:
private static string GetSiteName(string metabasePath)
{
var siteIdString = metabasePath.Substring(metabasePath.LastIndexOf("/") + 1);
long siteId;
long.TryParse(siteIdString, out siteId);
if (siteId != 0)
{
var iisManager = new ServerManager();
var config = iisManager.GetApplicationHostConfiguration();
var sites = config.GetSection("system.applicationHost/sites").GetCollection();
ConfigurationElement selectedSite = null;
foreach (var site in sites)
{
if ((long)site.GetAttribute("id").Value == siteId)
selectedSite = site;
}
if (selectedSite != null)
{
return selectedSite.GetAttribute("name").Value as string;
}
}
return null;
}
要使用此功能,您必须参考:
C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll
C:\Windows\System32\inetsrv\Microsoft.Web.Management.dll