2009-12-16 78 views
1

我正在爲WCF net-tcp服務創建安裝項目。我遇到的一件事是我需要更改「網站 - >管理應用程序 - >高級設置 - >啓用協議」。它可以通過命令行來也做:從Web項目設置中獲取網站名稱

%windir%\system32\inetsrv\appcmd.exe set app "[Web Site Name]/[Applicaiton Name]" /enabledProtocols:http,net.tcp 

的問題是在自定義操作,我可以得到[TARGETSITE]但它的值是「/ LM/SVC/2」(我有[TARGETVDIR]太)。問題是如何獲得網站名稱,或者如何使用[TARGETSITE]設置啓用應用程序的協議?

回答

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 
+0

其實我發現,Web安裝項目在VS2008和VS2010 Beta 2中不支持IIS7接口。他們通過IIS6兼容性擴展來部署應用程序,因此使用IIS6接口也可以安全地編寫自己的擴展(直到支持IIS7) – 2010-01-15 10:18:24