在Visual Studio Team Services中作为Windows用户运行
问题描述:
我需要在Team Services中构建一个Visual Studio项目,然后运行一些测试。测试会进行REST API调用,然后通过直接访问数据库来验证REST API调用是否工作。数据库是Microsoft SQL Server数据库,只允许Windows Authenticated用户访问它。它在内部服务器上运行。所以当我在本地运行我的机器上的构建时,它工作正常,但在Team Services中,测试失败,因为它们无法访问数据库。我想知道是否有可能以用户身份运行测试或以某种方式解决此问题。在Visual Studio Team Services中作为Windows用户运行
欢迎任何建议,但请注意,我绝对需要能够直接访问数据库来验证API。
答
通过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代理访问。