Rap*_*ger 5 azure azure-functions kql azure-data-explorer
我遇到以下问题,并且在线进行广泛搜索没有提供任何好的结果。当尝试访问我的 Azure 数据资源管理器数据库并在 Azure 函数中使用 Kusto.Data SDK 进行查询时,会产生以下错误:
Kusto 客户端无法向服务发送请求:“在 getsockopt 或 setsockopt 调用中指定了未知、无效或不受支持的选项或级别。”
但是,在我的本地计算机上运行该函数,一切正常。
编辑:该功能除了using (var reader = await queryProvider.ExecuteQueryAsync(Database, query, clientRequestProperties))
编辑2 - 解决方案:
您可以将 NuGet Kusto.Data 包降级到版本 9.4.1,这可以解决问题并且不再抛出任何错误。如果仍然遇到困难,可以尝试通过http请求直接访问ADX数据库:
const string tenantId = "<tenantId>";
const string client_id = "<clientId>";
const string client_secret = "<client_secret>";
const string Cluster = "<cluster_adress";
const string Database = "<database_name>";
var authUrl = "https://login.microsoftonline.com/<tenantId>/oauth2/token";
var param = new Dictionary<string, string>
{
{"client_id",client_id},
{"grant_type","client_credentials"},
{"client_secret",client_secret},
{"resource","https://help.kusto.windows.net"}
};
var data = new FormUrlEncodedContent(param);
using var authClient = new HttpClient();
var response = await authClient.PostAsync(authUrl, data);
string result = response.Content.ReadAsStringAsync().Result;
//parse result
var resultJson = System.Text.Json.JsonDocument.Parse(result);
//retrieve access token
var accessToken = resultJson.RootElement.GetProperty("access_token");
//-----------------------------------------------------------------------------------------------
var dataXUrl = Cluster + "/v1/rest/query";
var database = Database;
var dataXQuery = "sample_table| where Time > ago(2min)";
var body = new Dictionary<string, string>
{
{"db",database},
{"csl",dataXQuery}
};
using var dataXClient = new HttpClient();
dataXClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.ToString());
dataXClient.DefaultRequestHeaders.Add("Accept", "application/json");
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, dataXUrl);
request.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");
var table = await dataXClient.SendAsync(request);
//pretty print
var obj = JsonConvert.DeserializeObject(table.Content.ReadAsStringAsync());
var tableJSON = JsonConvert.SerializeObject(obj, Formatting.Indented);
log.LogInformation("\n\n" + tableJSON);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |