You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#代码下载Azure Data Lake Gen2中CSV文件时遇访问异常

解决Azure Data Lake Storage Gen2下载CSV时的SocketException(11004)错误

报错信息

下载CSV文件时触发的异常链:
---> Microsoft.WindowsAzure.Storage.StorageException: The requested name is valid, but no data of the requested type was found.
---> System.Net.Http.HttpRequestException: The requested name is valid, but no data of the requested type was found.
---> System.Net.Sockets.SocketException (11004): The requested name is valid, but no data of the requested type was found.

问题本质

这个11004错误核心是DNS解析失败,无法定位存储账户的服务端点;再加上你使用的是已被弃用的Microsoft.WindowsAzure.Storage SDK,该库对ADLS Gen2的分层命名空间支持不完善,双重因素导致连接失败。

解决方案

1. 切换到官方推荐的Azure.Storage.Blobs SDK

弃用旧的WindowsAzure.Storage库,改用专门适配Blob存储和ADLS Gen2的Azure.Storage.Blobs包:

  • 在NuGet包管理器中安装Azure.Storage.Blobs,或执行命令:
    Install-Package Azure.Storage.Blobs
    

2. 修正连接字符串与端点配置

ADLS Gen2默认使用DFS端点(dfs.core.windows.net),需在连接字符串中明确指定,确保DNS解析正确:

string connectionString = $"DefaultEndpointsProtocol=https;AccountName={blobAccountName};AccountKey={blobAccountKey};BlobEndpoint=https://{blobAccountName}.dfs.core.windows.net/;";

3. 重构代码(异步适配+新SDK)

避免使用.Result阻塞异步调用(易引发死锁),同时适配新SDK的API:

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Specialized;
using System.IO;
using System.Threading.Tasks;

public static async Task<string[]> DownloadContentsFromAdlsAsync(string blobAccountName, string blobAccountKey, string containerName, string blobFileName, string blobStoragePath)
{
    Console.WriteLine("Inside download contents from ADLS()");

    // 构建ADLS Gen2适配的连接字符串
    string connectionString = $"DefaultEndpointsProtocol=https;AccountName={blobAccountName};AccountKey={blobAccountKey};BlobEndpoint=https://{blobAccountName}.dfs.core.windows.net/;";

    // 初始化Blob服务客户端
    BlobServiceClient serviceClient = new BlobServiceClient(connectionString);

    // 获取容器引用
    BlobContainerClient containerClient = serviceClient.GetBlobContainerClient(containerName);

    // 拼接完整的分层文件路径(ADLS Gen2支持目录结构)
    string fullBlobPath = Path.Combine(blobStoragePath, blobFileName).Replace("\\", "/");

    // 获取Blob客户端
    BlockBlobClient blobClient = containerClient.GetBlockBlobClient(fullBlobPath);

    // 异步下载文本内容
    var downloadResult = await blobClient.DownloadContentAsync().ConfigureAwait(false);
    string contentText = downloadResult.Value.Content.ToString();

    Console.WriteLine("Contents from ADLS has been Downloaded!");

    return ConvertStringToStringArray(contentText);
}

4. 额外检查项

  • 确认存储账户已启用分层命名空间(ADLS Gen2必备特性)
  • 检查网络防火墙设置:确保运行代码的环境允许出站访问*.core.windows.net和*.dfs.core.windows.net
  • 验证存储账户密钥、容器名称、文件路径的正确性(Azure存储资源名称大小写敏感)

内容的提问来源于stack exchange,提问作者Ganeshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:15:47