2010-12-03 14 views
9

Windows Azure'da bir WebRole başlatmanın bir parçası olarak Başlatılan web sitesindeki dosyalara erişmek istiyorum ve bunu RoleEntryPoint.OnStart() içinde yapmak istiyorum. Bu, örneğin ASP.NET AppDomain yüklenmeden önce ASP.NET yapılandırmasını etkilememi sağlar.WebRole site kök yolunu RoleEntryPoint.OnStart() içinden nasıl edinebilirim?

Azure SDK 1.3 ve VS2010 ile yerel olarak çalışırken, aşağıdaki örnek kod işe yaramaz, ancak kodun etrafındaki kırılma kokusu vardır ve Azure'a dağıtılırken hile yapmaz.

XNamespace srvDefNs = "http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"; 
    DirectoryInfo di = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory); 
    string roleRoot = di.Parent.Parent.FullName; 
    XDocument roleModel = XDocument.Load(Path.Combine(roleRoot, "RoleModel.xml")); 
    var propertyElements = roleModel.Descendants(srvDefNs + "Property"); 
    XElement sitePhysicalPathPropertyElement = propertyElements.Attributes("name").Where(nameAttr => nameAttr.Value == "SitePhysicalPath").Single().Parent; 
    string pathToWebsite = sitePhysicalPathPropertyElement.Attribute("value").Value; 

nasıl hem dev ve Azure üzerinde çalışmak bir bakıma RoleEntryPoint.OnStart() den WebRole sitesi kök yolunu alabilirim? Eğer aradığınızı size

Environment.GetEnvironmentVariable("RoleRoot") 

Does:

cevap

12

Bu Windows Azure hem dev ve çalışmıyor gibi görünüyor:

private IEnumerable<string> WebSiteDirectories 
{ 
    get 
    { 
     string roleRootDir = Environment.GetEnvironmentVariable("RdRoleRoot"); 
     string appRootDir = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory); 

     XDocument roleModelDoc = XDocument.Load(Path.Combine(roleRootDir, "RoleModel.xml")); 
     var siteElements = roleModelDoc.Root.Element(_roleModelNs + "Sites").Elements(_roleModelNs + "Site"); 

     return 
      from siteElement in siteElements 
      where siteElement.Attribute("name") != null 
        && siteElement.Attribute("name").Value == "Web" 
        && siteElement.Attribute("physicalDirectory") != null 
      select Path.Combine(appRootDir, siteElement.Attribute("physicalDirectory").Value); 
    } 
} 

kimse ASP.NET uygulamasında dosyaları işlemek için bu kullanırsanız, bilmeli RoleEntryPoint.OnStart tarafından yazılan dosya() ASP.NET uygulamasının bunları güncelleştirmesini engelleyen ACL ayarları olacaktır. Eğer ASP.NET böyle dosyalara bu mümkün böylece dosya izinlerini değiştirebilir nasıl bu kod göstermek yazmak gerekirse

: Bilginize

SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null); 
IdentityReference act = sid.Translate(typeof(NTAccount)); 
FileSecurity sec = File.GetAccessControl(testFilePath); 
sec.AddAccessRule(new FileSystemAccessRule(act, FileSystemRights.FullControl, AccessControlType.Allow)); 
File.SetAccessControl(testFilePath, sec); 
+1

Dağıtılan dosyaların izinlerinin değiştirilmesi ve/veya düzenlenmesi, yalnızca bu ServiceDefinition.csdef dosyasındaki WebRole'a eklendiğinde mümkündür. –

4

bir göz atın?

+0

, bu SDK 1.5/1.6 itibariyle kayboldu düşünüyorum. – Nariman

+0

Sabit 'RdRoleRoot' gibi görünüyor. – sharptooth

+0

şimdi de RdRoleRoot yok. – Amit

İlgili konular