通过SQL Job Agent连接到“ Visual Studio Online”(vso)的C#可执行文件失败

时间:2019-01-02 06:47:13

标签: c# sql-server visual-studio tfs ssis

我已经使用C#创建了一个可执行文件,该文件连接到VSO,获取工作项并对其进行更新。

以下是用于连接到VSO并获取项目的代码:

TfsTeamProjectCollection tfsTeamProjectCollection = null;
NetworkCredential networkCredential = new NetworkCredential(userName, password);
ICredentials credential = (ICredentials)networkCredential;
Uri tfsUri = new Uri(tfsUrl);

TfsConfigurationServer tfai = new TfsConfigurationServer(tfsUri, (ICredentials)credential);

try
{
    tfai.EnsureAuthenticated();
}
catch (Exception ex)
{
    throw new Exception(string.Format("Auth fail.({0})", ex.Message));
}
Microsoft.TeamFoundation.Framework.Client.ITeamProjectCollectionService tpcService = tfai.GetService<Microsoft.TeamFoundation.Framework.Client.ITeamProjectCollectionService>();

Microsoft.TeamFoundation.Framework.Client.CatalogNode configurationServerNode = tfai.CatalogNode;

System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.TeamFoundation.Framework.Client.CatalogNode> tpcNodes = configurationServerNode.QueryChildren(new Guid[] { Microsoft.TeamFoundation.Framework.Common.CatalogResourceTypes.ProjectCollection }, false, Microsoft.TeamFoundation.Framework.Common.CatalogQueryOptions.None);

foreach (Microsoft.TeamFoundation.Framework.Client.CatalogNode tpcNode in tpcNodes)
{
    if (tpcNode.Resource.DisplayName.ToUpper() == "PROJECTNAME")
    {
        tfsTeamProjectCollection = tfai.GetTeamProjectCollection(new Guid(tpcNode.Resource.Properties["InstanceID"]));
        foundProject = true;
        break;
    }
}

if(foundProject)
{
    WorkItemStore workItemStore = (WorkItemStore)tfsTeamProjectCollection.GetService(typeof(WorkItemStore));
}

代码工作正常。 手动运行时,即使是相同代码的exe也可以正常工作。

我已经创建了一个SSIS包,执行过程任务在手动运行时可以很好地运行该exe。

但是当我部署程序包并通过SQL Agent作业运行它时,它失败并显示错误:

  

错误:在“”处执行“ name.exe”“”。进程退出代码为   “ -532462766”,而预期值为“ 0”。

我尝试在32位和64位环境中运行该程序包。每次失败均出现相同错误。

所有用户(SQLSERVERINSTANCE,SQLSERVERAGENT,SERVICEACCOUNT)都有权访问可执行文件。

我错过了什么吗?还是我必须在服务器端进行一些更改才能使SQL Agent能够连接到VSO?

P.S .:我正在使用SQL SERVER 2016。

1 个答案:

答案 0 :(得分:0)

“所有用户(SQLSERVERINSTANCE,SQLSERVERAGENT,SERVICEACCOUNT)都可以访问可执行文件。”并不意味着这些帐户可以访问该资源,例如引用,在可执行文件中使用。

您需要创建一个具有足够权限的代理帐户,然后使用它来运行作业步骤。

请参阅:SQL Credentials and Proxy for Agent Job