2017-06-22 117 views
0

我有一個web應用程序有2個實例作爲默認值,並從資源管理器,我可以看到有兩個實例。 然而,在Global.asax中的代碼,我有這樣的代碼:蔚藍的web應用程序多個實例混淆

public class LogEntity : TableEntity 
    { 
     public LogEntity(string partitionKey, string rowKey) 
     { 
      this.PartitionKey = partitionKey; 
      this.RowKey = rowKey; 
     } 
     public LogEntity() { } 
     public string Submitter { get; set; } 
    } 

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     Random ran = new Random(); 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); 
     var tableClient = storageAccount.CreateCloudTableClient(); 
     CloudTable table = tableClient.GetTableReference("logs"); 
     table.CreateIfNotExists(); 

     var key1 = ran.Next(); 
     var machineName1 = Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID"); 

     LogEntity log1 = new LogEntity(Environment.MachineName + ":" + machineName1 + ":" + key1.ToString(), "instance started"); 
     TableBatchOperation batchOperation1 = new TableBatchOperation(); 
     batchOperation1.Insert(log1); 
     table.ExecuteBatch(batchOperation1); 

    } 
} 

但是,從我的Azure Table中的日誌,我只能看到一個生成的日誌條目,它總是從同一個實例。

這是否意味着當我有多個實例時,只有一個實例會調用application_start?我認爲所有實例都應該在獨立運行時啓動application_start。但是,我的日誌似乎與我的理解矛盾。

UPDATE

我發現,記錄到Azure Table中的代碼。我期待的是,由於有兩個實例,我應該看到在天藍色表中創建的兩個日誌條目。但是,總是隻有一個條目。

+0

您可以分享您在執行應用程序啓動時執行的代碼嗎?請用代碼更新您的問題。 –

+0

謝謝!什麼是你試圖插入的實體的PartitionKey/RowKey?我沒有看到你的代碼。如果你也可以包含'LogEntity'的代碼,它也會有所幫助。 –

+0

的partitionKey鍵包含實例ID和機器名,所以應該給我不同的條目針對不同的情況下 – daxu

回答

3

我和微軟的支持人員進行了一些討論,並且明白了爲什麼現在。

我的網站,我得到了ARR親和力上,與設置上,蔚藍的負載均衡器將只啓用已被訪問(如親和餅乾)中的那些。結果,我只看到我的代碼運行一次。

當我禁用親和力,蔚藍的負載均衡器將使同時在所有情況下,我看到在所有情況下我的代碼運行。

相關問題