2016-08-16 49 views
1

我需要在Team Services中构建一个Visual Studio项目,然后运行一些测试。测试会进行REST API调用,然后通过直接访问数据库来验证REST API调用是否工作。数据库是Microsoft SQL Server数据库,只允许Windows Authenticated用户访问它。它在内部服务器上运行。所以当我在本地运行我的机器上的构建时,它工作正常,但在Team Services中,测试失败,因为它们无法访问数据库。我想知道是否有可能以用户身份运行测试或以某种方式解决此问题。在Visual Studio Team Services中作为Windows用户运行

欢迎任何建议,但请注意,我绝对需要能够直接访问数据库来验证API。

回答

2

通过VSTS构建项目,它使用vsts代理帐户(可以在安装vsts代理时指定)。首先,如果您使用您的vsts代理进行构建和测试,并且该计算机中的Windows帐户可以连接到SQL Server并读取数据,则可以模拟用户从SQL Server访问数据。

简单代码:

public static class Helper 
{ 
    [DllImport("advapi32.dll", SetLastError = true)] 
    public static extern bool LogonUser(
     string lpszUsername, 
     string lpszDomain, 
     string lpszPassword, 
     int dwLogonType, 
     int dwLogonProvider, 
     out IntPtr phToken); 
} 

-

IntPtr userToken = IntPtr.Zero; 

     bool success = Helper.LogonUser(
      "[user name]", 
      "[domain]", 
      "[password]", 
      2, //2 
      0, //0 
      out userToken); 

     if (!success) 
     { 
      Assert.Fail("Logon user failed"); 

     } 

     using (WindowsIdentity.Impersonate(userToken)) 
     { 
      //TODO connect to your sql server database 

}

其次,如果使用的是托管代理,唯一的办法是,你需要使用SQL Server的帐户访问SQL Server数据库,并确保您的SQL Server实例可以从Hosted代理访问。

相关问题