我有一个Azure功能,我希望它从EventHub获取消息(这是相当简单和有效),然后在运行时使用表绑定将该信息放入表存储.
这是我到目前为止所拥有的:
public static async Task Run(string eventHubMessage, TraceWriter log, Binder binder) { var m = JsonConvert.DeserializeObject<Measurement>(eventHubMessage); var attributes = new Attribute[] { new StorageAccountAttribute("AzureWebJobsTest"), new TableAttribute(tableName, m.PartitionKey, m.RowKey) }; using(var output = await binder.BindAsync<MyTableEntity>(attributes)) { if(output == null) log.Info($"4. output is null"); else { output.Minimum = m.Minimum; output.Maximum = m.Maximum; output.Average = m.Average; output.Timestamp = m.Timestamp; output.ETag = m.ETag; output.WriteEntity(/* Need an operationContext*/) } } } public class MyTableEntity : TableEntity, Idisposable { public double Average { get; set;} public double Minimum { get; set;} public double Maximum { get; set;} bool disposed = false; public void dispose() { dispose(true); GC.SuppressFinalize(this); } protected virtual void dispose(bool disposing) { if (disposed) return; if (disposing) { } disposed = true; } }
@H_404_9@我的问题;
1)输出始终为空.
2)即使输出不为null,我也不知道我对OperationContext需要什么,或者调用ITableEntity.Write()甚至是正确的方法来使它写入表存储.
ETA Json绑定:
{ "bindings": [ { "type": "eventHubTrigger", "name": "eventHubMessage", "direction": "in", "path": "measurements", "connection": "MeasurementsConnectionString" } ], "disabled": false }
@H_404_9@解决方法:
要向Table添加新条目,您应该绑定到IAsyncCollector而不是实体本身,然后创建一个新实体并调用AddAsync.以下代码段对我有用:
var attributes = new Attribute[] { new StorageAccountAttribute("..."), new TableAttribute("...") }; var output = await binder.BindAsync<IAsyncCollector<MyTableEntity>>(attributes); await output.AddAsync(new MyTableEntity() { PartitionKey = "...", RowKey = "...", Minimum = ..., ... });
@H_404_9@版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。