2012-06-11 16 views
2

Я пытаюсь вызвать старую VB6 dll (без исходного кода) из проекта ASP.NET. DLL подключается к серверу с использованием проверки подлинности Windows, поэтому мне нужно вызывать функции как определенный пользователь, а не NETWORKSERVICE, как сейчас.Вызывать функции COM DLL из проекта ASP.NET как конкретного пользователя

Это было бы желательно определить во время разговора, а не при загрузке, потому что я выдаю себя за удаленного пользователя и хотел бы, чтобы это было пользователем, вызывающим функции, а не пользователем приложения, а не NETWORKSERVICE, как сейчас.

Итак, браузер работает под управлением USER, подключившись к приложению, выдающему себя за пользователя USER, вызывая DLL как USER, но DLL пытается подключиться к удаленному серверу как NETWORKSERVICE, а не USER.

Возможно ли подключить эту DLL к удаленному серверу в качестве ПОЛЬЗОВАТЕЛЯ? Или, если ничего другого, подключиться как пользователь приложения?

Edit:
Заимствование осуществляется в коде вызова Impersonate() на пульте дистанционного управления пользователя WindowsIdentity. У компании, в которой я работаю, есть таможня SecurityPrincipal10 и SecurityIdentity, поэтому это странно, как мне нужно получить WindowsIdentity (это немного больше, чем у User.Identity), но я использовал этот метод до того, как успешно и подтвердил, что System.Security.Principal.WindowsIdentity.GetCurrent().Name является правильным пользователем во время олицетворения.

+0

@rkosegi Читать все сообщение, я олицетворяю себя. –

+0

Если все происходит в процессе между приложением и DLL, но DLL все еще использует другие учетные данные, это, вероятно, означает, что проблема связана с DLL-кодом. –

+0

Возможно, было бы полезно разместить какой-то код точно, как ** вы выдаете себя за себя. Пулы приложений ASP.NET запускаются под NETWORK SERVICE по умолчанию и, если вы не правильно переключаете контексты пользователей, он будет продолжать использовать этого пользователя для доступа к сетевым ресурсам. – Sumo

ответ

0

В конце концов я нашел проблему (которая просто привела к другим проблемам, но в любом случае) оказалось, что у меня отсутствовала AspCompat="true" на моей странице. На самом деле проблема заключалась в том, что я использовал «обработчик», а не «страницу». У обработчиков нет возможностей STA, которые есть у страниц. То, что происходило, было каждый раз, когда я пытался получить доступ к COM-компоненту, был бы переключатель потоков (олицетворение потеряно), поскольку приложение работает в MTA, а COM-компонент должен работать в STA.

1

Сначала я попытался выяснить, как подключается DLL как другой пользователь (Process Explorer может помочь с этим). Возможно ли, что DLL связывается с сервисом (или каким-либо другим процессом), который запущен на ящике, который зарегистрирован как NETWORKSERVICE? Если это так, вы можете change that service to run as a different user. Просто хватаясь за соломинку, надеюсь, что ты это выяснишь!

Смежные вопросы