[英]Azure Functions C# CloudTable Table Query doesn't return any matching results
我有一個 C# Azure 耐用的 function 需要從一些表中讀取數據並將數據放入其他表中,以響應它通過 HTTP 觸發器接收到的一些入站 JSON。 一切進展順利。 現在,我以前在代碼中進行查詢時使用的完全相同的語法和方法突然沒有返回任何結果。 我確定我一定忽略了一些明顯的事情。
在這里,我綁定 CloudTable,就像我對其他有效查詢所做的那樣:
[Table ("ProductFeatures")] CloudTable ProductFeatures,
我定義表實體:
public class FeatureEntity : TableEntity
{
public string productcode {get;set;}
public string featurecode {get;set;}
public string featurefriendlyname {get;set;}
}
除非我遺漏了什么,否則這與表中的內容相匹配,並且如您所見,如果我嘗試匹配產品productcode
“測試”,我應該返回一些實際條目,我已經通過日志記錄驗證了它的值嘗試執行匹配時在查詢(下面)中使用的prodcode
。
在這里我反對它:
var ProdFeatures = new List<FeatureEntity>();
TableQuery<FeatureEntity> featureQuery = new TableQuery<FeatureEntity>()
.Where(TableQuery.GenerateFilterCondition("productcode", QueryComparisons.Equal, prodcode));
// TableContinuationToken ct = null; <== declared in previous query, so we reset it
ct = null;
try
{
do
{
var page = await ProductFeatures.ExecuteQuerySegmentedAsync(featureQuery, ct);
ct = page.ContinuationToken;
ProdFeatures.AddRange(page.Results);
}
while (ct != null);
}
接下來,我們對ProdFeatures
進行檢查:
if (ProdFeatures.Count == 0)
{
log.LogInformation($"[{Product}]: No features found - Processing Terminated");
return false;
}
在進行此查詢之前,我對 2 個查詢使用了完全相同的方法,所以我真的很困惑為什么它沒有返回任何結果。 我覺得這可能是我遺漏的一些非常愚蠢的東西,但我已經多次檢查它並且無法弄清楚為什么它沒有返回您可以在表格圖像中看到的匹配數據。
這發生在持久函數編排器調用的異步任務 function 中:
Boolean success = await context.CallActivityAsync<Boolean>("DoQueueItem",data);
任務定義如下:
[FunctionName("DoQueueItem")]
public static async Task<Boolean> DoQueueItem([ActivityTrigger] MySpecialItem Item,
[Table ("ProductFeatures")] CloudTable ProductFeatures,
ILogger log)
總運行時間小於 5 秒,所以我認為我不會與任何處理限制發生沖突,但我對 Azure 很陌生,想知道是否可能存在具有持久功能的環境或上下文性質的東西一般可能會影響這一點。
在您的 Function 注釋中,我沒有看到您在表輸入綁定中傳遞了Connection參數:
[FunctionName("DoQueueItem")]
public static async Task<Boolean> DoQueueItem([ActivityTrigger] MySpecialItem Item,
[Table ("ProductFeatures", Connection = "StorageConnectionAppSetting")] CloudTable ProductFeatures,
ILogger log)
我懷疑因為它沒有連接到你想要的存儲帳戶(默認情況下,如果你沒有指定連接,它使用相同的 function 主機存儲)。 有關詳細信息,請參閱此。
連接:應用程序設置的名稱,其中包含用於此綁定的存儲連接字符串。 例如,如果您將連接設置為“MyStorage”,Functions 運行時會查找名為“MyStorage”的應用程序設置。 如果將連接留空,Functions 運行時將使用名為 AzureWebJobsStorage 的應用設置中的默認存儲連接字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.