为什么一个azure函数看不到配置的连接字符串?

问题描述:

由于一些奇怪的原因,我的azure函数停止从应用程序配置中查看连接字符串。为什么一个azure函数看不到配置的连接字符串?

我可以保证这个代码在工作之前,工作后我继续在主函数中添加简单的验证,并在最后停止查找配置的连接字符串。

现在的问题是使用GetMetaData函数访问mongo时:cs连接字符串引发异常时引发异常对象引用未设置为对象的实例,这意味着未找到连接字符串mongo:cs。

我在函数中添加了一些调试代码,以便查看哪些连接字符串被加载,并且发现加载的代码不符合配置的代码。

有没有人遇到类似的问题?

你可以找到完整的功能代码,输出和图像与配置

连接字符串

运行时版本:最新(-1)

using MongoDB.Bson; 
using MongoDB.Driver; 
using System.Configuration; 
using System.Net; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) 
{ 
    log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}"); 

    // parse query parameter 
    string sId = req.GetQueryNameValuePairs() 
     .FirstOrDefault(q => string.Compare(q.Key, "id", true) == 0) 
     .Value; 

    Guid id; 
    log.Info($"Step1={sId}"); 
    if(Guid.TryParse(sId, out id)) 
    { 
     log.Info($"Step1.5={id}"); 
     string metaData = GetMetaData(id, log); 
     log.Info($"Step2"); 
     if(String.IsNullOrEmpty(metaData)) 
     { 
      log.Info($"Step3"); 
      return req.CreateResponse(HttpStatusCode.NotFound); 
     } 
     else 
     { 
      log.Info($"Step4"); 
      return req.CreateResponse(HttpStatusCode.OK, metaData); 
     } 

    } 
    else 
    { 
     log.Info($"Step5"); 
     return req.CreateResponse(HttpStatusCode.BadRequest); 
    } 
} 

private static string GetMetaData(Guid id, TraceWriter log) 
{ 
    //Begin debug code that was added after the connection string stopped working 
    log.Info($"Step6"); 
    var count = ConfigurationManager.ConnectionStrings.Count; 
    log.Info($"Count={count}"); 
    var name0 = ConfigurationManager.ConnectionStrings[0].Name; 
    log.Info($"Name0={name0}"); 
    var name1 = ConfigurationManager.ConnectionStrings[1].Name; 
    log.Info($"Name1={name1}"); 
    //End debug code 
    string cnn = ConfigurationManager.ConnectionStrings["mongo:cs"].ConnectionString; 
    log.Info($"Step7"); 
    IMongoClient client = new MongoClient(cnn); 
    log.Info($"Step8"); 
    IMongoDatabase db = client.GetDatabase("cxsopdev"); 
    log.Info($"Step9"); 
    var filter = Builders<BsonDocument>.Filter.Eq("_id", id); 
    log.Info($"Step10"); 
    var result = db.GetCollection<BsonDocument>("excelfiletoload").Find(filter).FirstOrDefault(); 
    log.Info($"Step11"); 
    return result.ToString(); 
} 

2016-11-12T00:27:56.786 Function started (Id=20c0183f-9989-4a62-9834-461df7fd8ae5) 
2016-11-12T00:27:56.786 C# HTTP trigger function processed a request. RequestUri={...} 
2016-11-12T00:27:56.786 Step1=857B689F-C32B-46DA-BCD9-05D92A0F151A 
2016-11-12T00:27:56.786 Step1.5=857b689f-c32b-46da-bcd9-05d92a0f151a 
2016-11-12T00:27:56.786 Step6 
2016-11-12T00:27:56.786 Count=2 
2016-11-12T00:27:56.786 Name0=LocalSqlServer 
2016-11-12T00:27:56.786 Name1=LocalMySqlServer 
2016-11-12T00:27:56.786 Function completed (Failure, Id=20c0183f-9989-4a62-9834-461df7fd8ae5) 
2016-11-12T00:27:56.786 Exception while executing function: Functions.GetImportMetaData. GetImportMetaData: Object reference not set to an instance of an object. 

Connection strings configured

你发现了一个bug !

请现在将​​应用更改为〜0.9。我们希望尽快用修补程序更新〜1。一旦我们确认它已修复,我会尽量记住更新。

还创建了一个问题,以确保我们的测试ConfigurationManager中正确地从现在开始工作...... https://github.com/Azure/azure-webjobs-sdk-templates/issues/353

+0

克里斯1.0认为是稳定的或者它只是相同的预览的另一个增量? – 4c74356b41

+1

Azure函数仍处于预览状态。我们刚刚完成了对现在和GA之间的主机的重大改变,这应该在这个日历年进行。 –