У нас есть база данных, работающая на SQL 2005. Одна из процедур сохранения ищет адрес электронной почты пользователя из Active Directory, используя связанный сервер. Вызов на связанный сервер происходит в функции базы данных.
Я могу в первый раз успешно позвонить из моего приложения Asp.Net, но периодически после этого происходит сбой со следующей ошибкой:
{"Запрошенная операция не может быть выполнена, поскольку поставщик OLE DB \" ADsDSOObject \ "для связанного сервера \" ADSI \ "не поддерживает требуемый интерфейс транзакции."}
Похоже, что промежуток времени между вызовами функции влияет на правильность работы запроса связанного сервера. Я не использую никаких транзакций. Когда я пытаюсь вызвать функцию в быстром временном сценарии SQL, она всегда работает нормально (даже при быстрой проверке).
Есть ли какая-то транзакция, которая остается открытой, которая естественным образом умирает, если я не пытаюсь вызвать процедуру снова? Я в недоумении.
Вот простой вызов в хранимой процедуре:
DECLARE @email varchar(50)
SELECT @email = LEFT(mail, 50)
FROM OPENQUERY (
ADSI,
'SELECT mail, sAMAccountName FROM ''LDAP://DC=Katz,DC=COM'' WHERE objectCategory = ''Person'' AND objectClass = ''User'''
)
WHERE sAMAccountName = CAST(@LoginName AS varchar(35))
RETURN @email