gpt4 book ai didi

azure - 在 Azure Function 中使用 Kusto.Data 访问 Azure 数据资源管理器 - Kusto 无法发送请求 - 本地调试有效

转载 作者:行者123 更新时间:2023-12-02 22:54:05 30 4
gpt4 key购买 nike

我遇到了以下问题,并且在线进行了大量搜索没有提供任何好的结果。当尝试访问我的 Azure 数据资源管理器数据库并在 Azure 函数中使用 Kusto.Data SDK 进行查询时,会产生以下错误:

Kusto 客户端无法向服务发送请求:“在 getsockopt 或 setsockopt 调用中指定了未知、无效或不受支持的选项或级别。”

但是,在我的本地计算机上运行该函数,一切正常。

编辑:该函数除了 using (var reader = wait 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);

最佳答案

我在 Azure 应用服务上的连续 Web 作业上遇到同样的问题。我使用的 Kusto nuget 版本是 10.1.0

降级到 nuget 9.4.1 立即解决了问题。

关于azure - 在 Azure Function 中使用 Kusto.Data 访问 Azure 数据资源管理器 - Kusto 无法发送请求 - 本地调试有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73218629/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com