Я пытаюсь использовать олицетворение windows в веб-службе asmx для чтения базы данных sql.
- Я создаю новую учетную запись в Windows.
- Установить разрешение на полный контроль над файлом базы данных ORLDatabase.mdf.
Теперь я вызываю метод GetDataSet, но он завершается на стороне клиента с этой ошибкой:
System.Web.Services.Protocols.SoapException: серверу не удалось обработать запрос. ---> System.Exception: разрешение CREATE DATABASE отклонено в базе данных «master».
Попытка присоединить базу данных с автоматическим именем для файла D: \ work \ WebService \ App_Data \ ORLDatabase.mdf не удалась. База данных с таким именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.
Я проверяю, что окна олицетворяют в коде с помощью WindowsIdentity.GetCurrent () , текущая идентификация хороша. Учетная запись имеет полный контроль над файлом базы данных, но она завершается с ошибкой.
Может ли кто-нибудь помочь мне, я не работаю с SQL. Я пытаюсь сначала Google, но не могу найти решение, которое решает мою проблему. Спасибо
public class Service : System.Web.Services.WebService
{
public TicketHeader Ticket;
public DataSet ds;
private string machine = "pcName";
public string userName = "********";
public string password = "*********";
public IntPtr token;
public WindowsImpersonationContext impersonationContext;
[DllImport(@"D:\Windows\System32\advapi32.dll")]
public static extern bool LogonUser
(string lpszUserName, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out int phToken);
public void Login()
{
int returnedToken;
if (LogonUser(userName, machine, password, 3, 0, out returnedToken))
{
token = new IntPtr(returnedToken);
}
}
[WebMethod]
public DataSet GetDataSet(string id)
{
DataSet ds = null;
Login();
impersonationContext = WindowsIdentity.Impersonate(token);
SqlConnection conn = null;
SqlDataAdapter da = null;
try
{
string sql = "Select * from Table";
conn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=True;" +
@"AttachDbFilename=|DataDirectory|\ORLDatabase.mdf;");
conn.Open();
da = new SqlDataAdapter(sql, conn);
ds = new DataSet();
da.Fill(ds, "Table");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
if (conn != null)
conn.Dispose();
}
impersonationContext.Undo();
return ds;
}
}