Для вызова веб-службы я создал библиотеку DLL в C # .NET 2.0.
После регистрации библиотеки DLL в SQL Server 2008 R2 я попытался в этой библиотеке DLL восстановить ее каталог вЧтобы загрузить файл конфигурации.
Проблема в том, что все методы, которые я нашел в Google, не работают, и это проблема, потому что я не могу загрузить файл.Я не хочу помещать некоторые «жесткие пути» в мой код, потому что он может меняться в зависимости от среды.
Существует способ регистрации моей DLL в SQL Server 2008:
DROP FUNCTION [Tools].[CallWriteDepot]
GO
DROP FUNCTION [Tools].[CallExtractDepot]
GO
drop assembly SqlAssembly
go
create assembly SqlAssembly
from 'C:\webservices\dll\SqlAssembly.dll'
with permission_set = unsafe
go
---------------------------------------------------------------------------------------------------
CREATE FUNCTION [Tools].[CallWriteDepot](@xmlInputFile [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlAssembly].[SqlAssembly.Main].[writeToSafe]
GO
---------------------------------------------------------------------------------------------------
CREATE FUNCTION [Tools].[CallExtractDepot](@xmlInputFile [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SqlAssembly].[SqlAssembly.Main].[readFromSafe]
GO
Как видите, DLL находится в C: \ webservices \ dll \ SqlAssembly.dll, и найти этот путь в коде DLL невозможно, как вы можете видеть ниже.
Результат появляется после несколькихтесты:
Assembly.GetAssembly(typeof(SqlAssembly.Main)).CodeBase
Result : empty
attrTest2.Value = Assembly.GetAssembly(typeof(SqlAssembly.Main)).Location
Result : empty
Assembly.GetCallingAssembly().Location
Result : C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\SqlAccess.dll
Assembly.GetCallingAssembly().GetName().CodeBase
Result : file:///C:/Program Files/Microsoft SQL Server/MSSQL10_50.MSSQLSERVER/MSSQL/Binn/SqlAccess.DLL
Assembly.GetExecutingAssembly().Location
Result : empty
Assembly.GetExecutingAssembly().GetName().CodeBase
Result : empty
Directory.GetCurrentDirectory();
Result : C:\Windows\system32
AppDomain.CurrentDomain.BaseDirectory;
Result : C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\
Environment.CurrentDirectory;
Result : C:\Windows\system32
Если кто-нибудь знает, как SQL Server регистрирует функцию DLL?Это как сохранить функцию в зоне памяти и больше не читать файл dll.
Если у кого-то тоже есть решение;)