powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Web сервиси и многопоточность
4 сообщений из 4, страница 1 из 1
Web сервиси и многопоточность
    #33097320
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация такая:
Есть 3-х слойка: клиент + web сервис + база
Пока клиент и сервисы на одной машине, база на другой.
Используется NT Авторизация.

Есть 2 метода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
[WebMethod]
public bool Simple()
{
  try
  {
     SqlConnection cnn = new SqlConnection("Integrated Security=TRUE;Server='server\\ins';database='test'");
     cnn.Open();
     cnn.Close();
   }
   catch (Exception e)
   {
     Console.Write(e);
   }

   return true;
}

и

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
[WebMethod]
public bool Threader()
{
	try
	{
		for (int i =  0 ; i <  2 ; i++)
		{
			ThreadPool.QueueUserWorkItem(new WaitCallback(TestConnection));
		}
	}
	catch (Exception e)
	{
		Console.Write(e);
		return false;
	}

	return true;
}

private void TestConnection(object status)
{
	try
	{

		SqlConnection cnn = new SqlConnection(("Integrated Security=TRUE;Server='server\\ins';database='test'");
		cnn.Open();
		cnn.Close();
	}
	catch (Exception e)
	{
		Console.Write(e);
	}
}

Все легко и просто. Теперь:
1). Вызываю с киента Simple(). Все замечательно, конект проходит, все счастливы
2). Вызываю Threader(). Получаю отлуп "Sql Server does not exists or access denied".

Я в безопасности не силен но подозреваю, что второй работает не под той же учетной записью, что и основной поток. Хотя я могу и ошибаться...
В доках копаюсь но пока ничего путнего не нашел :( пока только какие-то намеки...
Подскажите где почитать про эту проблему или объясните чего с этим делать...
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Web сервиси и многопоточность
    #33097328
avilm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А дебажиться не пробовал?
...
Рейтинг: 0 / 0
Web сервиси и многопоточность
    #33097363
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробывал, честно говоря ничего особо не прояснилось.
Появились подозрения
В основном потоке:
Thread.CurrentPrincipal.Identity.Name = "DOMAIN\User"
HttpContext.Current.User.Identity.IsAuthenticated = true
В новом:
Thread.CurrentPrincipal.Identity.Name = ""
HttpContext.Current.User.Identity.IsAuthenticated = error: 'HttpContext.Current.User' does not exist

_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Web сервиси и многопоточность
    #33098272
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раскопал, подозорения оказались правильными...
Делать надо было так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
// Как аргумент передаем http-контекст главного потока
private void TestConnection(object status)
{
	HttpContext context = (HttpContext)(status).Current;
	IServiceProvider iServiceProvider = context as IServiceProvider;
	Type httpWorkerRequestType = typeof(HttpWorkerRequest);
	HttpWorkerRequest httpWorkerRequest = 
		iServiceProvider.GetService(httpWorkerRequestType) as HttpWorkerRequest;
	IntPtr ptrUserToken = httpWorkerRequest.GetUserToken();
	WindowsIdentity winIdentity = new WindowsIdentity(ptrUserToken);
	Console.WriteLine(WindowsIdentity.GetCurrent().Name);
	WindowsImpersonationContext impContext = winIdentity.Impersonate();

	try
	{

		SqlConnection cnn = new SqlConnection(("Integrated Security=TRUE;Server='server\\ins';database='test'");
		cnn.Open();
		cnn.Close();
	}
	catch (Exception e)
	{
		Console.Write(e);
	}
}

Может есть способ проще, но пока это все что я нашел.
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Web сервиси и многопоточность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]