Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Web сервиси и многопоточность / 4 сообщений из 4, страница 1 из 1
02.06.2005, 14:03
    #33097320
viper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web сервиси и многопоточность
Ситуация такая:
Есть 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
02.06.2005, 14:05
    #33097328
avilm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web сервиси и многопоточность
А дебажиться не пробовал?
...
Рейтинг: 0 / 0
02.06.2005, 14:13
    #33097363
viper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web сервиси и многопоточность
Пробывал, честно говоря ничего особо не прояснилось.
Появились подозрения
В основном потоке:
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
02.06.2005, 19:04
    #33098272
viper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web сервиси и многопоточность
Раскопал, подозорения оказались правильными...
Делать надо было так:
Код: 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
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Web сервиси и многопоточность / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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