【问题标题】:Azure HTTP function failing to publishAzure HTTP 功能无法发布
【发布时间】:2019-09-20 15:28:54
【问题描述】:

我正在尝试将我的 Azure HTTP 函数从 Visual Studio Code 发布到我们的 Azure 平台。

代码在本地运行该函数并成功发布,但发布时抛出以下错误。

我尝试使用 DocumentDB 代替 CosmosDB,但它缺少将数据插入 CosmosDB 所需的插入功能。 Stackoverflow 没有针对这个特定问题的解决方案。

功能代码

//write to cosmosdb
[FunctionName("InsertItem")] 
public static HttpResponseMessage Run( 
    [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)]HttpRequestMessage req, 
    [CosmosDB( 
        databaseName: "ToDoList", 
        collectionName: "RFIDContainer", 
        ConnectionStringSetting = "myCosmosDBConnection")] 
    out RFIDBaseTag document, 
    ILogger log) 
{ 
    string hexData = "";
    string afi = "";
    string eid = "";
    string dsfid = "";
    //Guid DeviceID = new Guid();
    //Guid AppID = new Guid();

    var content = req.Content; 
    string jsonContent = content.ReadAsStringAsync().Result; 

    dynamic json = JsonConvert.DeserializeObject<MyClass>(jsonContent);

    hexData = json?.hexData;
    afi = json?.afi;
    eid = json?.eid;
    dsfid = json?.dsfid;

    /*Guid devGuid;
    Guid.TryParse(json.AppID.ToString(), out devGuid);
    DeviceID = devGuid;

    Guid appGuid;
    Guid.TryParse(json.AppID.ToString(), out appGuid);
    AppID = appGuid;*/

    byte[] hexToByte = AzureRFIDTagReader.StringToByteArray(hexData);

    RawRFIDReading raw = new RawRFIDReading();

    raw.afi = afi;
    raw.eid = eid;
    raw.dsfid = dsfid;
    raw.RawData = hexToByte;

    RFIDBaseTag rtag = RFIDTagFactory.GetTag(raw);
    string serializedtag = JsonConvert.SerializeObject(rtag);

    //document = JsonConvert.DeserializeObject<MyClass>(jsonContent);
    //document = JsonConvert.DeserializeObject<RFIDBaseTag(serializedtag);
    document = rtag;

    log.LogInformation($"C# Queue trigger function inserted one row");

    return new HttpResponseMessage(HttpStatusCode.Created); 
}

local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=xxxx;AccountKey=zzzz",
    "myCosmosDBConnection": "AccountEndpoint=xxx:443/;AccountKey=www;"
  }
}

错误信息:

函数 (xxx/InsertItem) 错误:Microsoft.Azure.WebJobs.Host:错误索引方法“InsertItem”。 Microsoft.Azure.WebJobs.Host:无法解析属性“CosmosDBAttribute.ConnectionStringSetting”的值。确保设置存在且具有有效值。

我可以在本地发布到函数,但不能在 Azure 上发布。

有什么建议吗?

【问题讨论】:

  • 您是否将连接字符串设置添加到函数应用程序?
  • 根据@Matias 的回答,local.settings.json 不会发布到 Azure(如文件名所示)。 Here's one way 在函数部署到 Azure 后替换您的“真实”Azure 部署设置。

标签: c# azure azure-cosmosdb


【解决方案1】:

当您发布函数时,您的 local.settings.json 文件不会发布。

您需要将这些设置添加为 Azure Functions 应用程序设置的一部分。在您的情况下,您需要在其中添加 myCosmosDBConnection 的值。

【讨论】:

  • 是的,这一切都说得通。可以在 - Function App Repo -> Function App Settings -> Manage Application Settings -> + New Application 设置中设置新的函数变量。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多