C# Azure data lake与数据工厂自定义活动的连接

C# Azure data lake与数据工厂自定义活动的连接,c#,azure,azure-data-factory,azure-data-lake,C#,Azure,Azure Data Factory,Azure Data Lake,我对azure数据工厂中的自定义活动有问题。 我想连接到其中的azure data lake。 我正在使用以下名称空间: using Microsoft.Azure.Management.DataLake.Store; using Microsoft.IdentityModel.Clients.ActiveDirectory using Microsoft.Rest.Azure.Authentication; 这是我的代码: public ConnectDataLakeStore(st

我对azure数据工厂中的自定义活动有问题。 我想连接到其中的azure data lake。 我正在使用以下名称空间:

using Microsoft.Azure.Management.DataLake.Store;
using Microsoft.IdentityModel.Clients.ActiveDirectory
using Microsoft.Rest.Azure.Authentication;
这是我的代码:

    public ConnectDataLakeStore(string applicationId, string applicationSecretKey, string tenantId)
    {
        var credentials = new ClientCredential(applicationId, applicationSecretKey);
        var creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, credentials).Result;
        var fileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
    }
我得到以下例外情况:

Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.Azure.Management.DataLake.Store.Models.AdlsErrorException: Operation returned an invalid status code 'Forbidden'
   at Microsoft.Azure.Management.DataLake.Store.FileSystemOperations.<ListFileStatusWithHttpMessagesAsync>d__12.MoveNext()
异常:System.Reflection.TargetInvocationException:调用的目标已引发异常。-->Microsoft.Azure.Management.DataLake.Store.Models.AdlErrorException:操作返回无效的状态代码“禁止”
在Microsoft.Azure.Management.DataLake.Store.FileSystemOperations.d_u12.MoveNext()上
当我在本地环境中运行自定义活动时,一切正常。部署到azure后出现问题。我还为广告应用程序授予了所有可能的权限


有什么提示吗?

我从你上面的评论中得知,你已经解决了这个问题。但仍然认为值得为将来类似问题的peep添加更多细节

首先使用服务主体和域详细信息创建凭据

方法:

    private static ServiceClientCredentials AuthenticateAzure(string domainName, string clientID, string clientSecret)
    {
        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

        var clientCredential = new ClientCredential(clientID, clientSecret);
        return ApplicationTokenProvider.LoginSilentAsync(domainName, clientCredential).Result;
    }
可能从库配置或项目属性中获取值

var creds = AuthenticateAzure(domainName, appId, appPass);
接下来,根据需要创建data lake帐户管理器或文件系统管理器的实例

    private static DataLakeStoreFileSystemManagementClient adlsFileSystemClient;
    private static DataLakeStoreAccountManagementClient adlsAccountManagementClient;

    adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
    adlsAccountManagementClient = new DataLakeStoreAccountManagementClient(creds);
接下来创建类似下面的方法将文件上载到data lake存储

上载程序的执行速度将快于创建文件方法

    private static void UploadFile(string srcFilePath, string destFilePath, string accName, bool force = true)
    {
        var parameters = new UploadParameters(srcFilePath, destFilePath, accName, isOverwrite: force);
        var frontend = new DataLakeStoreFrontEndAdapter(accName, adlsFileSystemClient);
        var uploader = new DataLakeStoreUploader(parameters, frontend);
        uploader.Execute();
    }
资料来源:

ADF定制活动

ADL认证


希望这能有所帮助

我从你上面的评论中得知,你已经解决了这个问题。但仍然认为值得为将来类似问题的peep添加更多细节

首先使用服务主体和域详细信息创建凭据

方法:

    private static ServiceClientCredentials AuthenticateAzure(string domainName, string clientID, string clientSecret)
    {
        SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());

        var clientCredential = new ClientCredential(clientID, clientSecret);
        return ApplicationTokenProvider.LoginSilentAsync(domainName, clientCredential).Result;
    }
可能从库配置或项目属性中获取值

var creds = AuthenticateAzure(domainName, appId, appPass);
接下来,根据需要创建data lake帐户管理器或文件系统管理器的实例

    private static DataLakeStoreFileSystemManagementClient adlsFileSystemClient;
    private static DataLakeStoreAccountManagementClient adlsAccountManagementClient;

    adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(creds);
    adlsAccountManagementClient = new DataLakeStoreAccountManagementClient(creds);
接下来创建类似下面的方法将文件上载到data lake存储

上载程序的执行速度将快于创建文件方法

    private static void UploadFile(string srcFilePath, string destFilePath, string accName, bool force = true)
    {
        var parameters = new UploadParameters(srcFilePath, destFilePath, accName, isOverwrite: force);
        var frontend = new DataLakeStoreFrontEndAdapter(accName, adlsFileSystemClient);
        var uploader = new DataLakeStoreUploader(parameters, frontend);
        uploader.Execute();
    }
资料来源:

ADF定制活动

ADL认证


希望这有助于解决问题。应解析NET Framework版本。NET框架版本应为