Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
У меня следующий вопрос - как из dll сделать assembly в SQL? И как дергать из нее методы, отправляя туда параметры?
И доп. вопросы возникшие в процессе - моя dll кушате еще несколько dll(их я клал в ту же директорию и консольки прекрасно функционировали) - их не нужно заносить в базу?
15 сен 11, 13:05    [11280742]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
чтиво
15 сен 11, 13:14    [11280839]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
А каие-то особые требования к dll есть(каие-нибудь там аттрибуты store procedure или еще в таком роде )? Или просто из моей dll-ки вытаскиваются методы с вводом в них параметров и все?
15 сен 11, 14:03    [11281316]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
ptybn84.07,

Использование Common Language Runtime (CLR) в Microsoft SQL Server 2005
http://www.gotdotnet.ru/blogs/crash/6527/20379/
15 сен 11, 14:09    [11281344]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
У меня в dll использованы некоторые библитоеки Microsoft Enterprice Library, в результате при попытке добавить их в SQL вручную(через база-сборки-добавить новую) возникает ошибка - он пишет, что в SQL отсутствует такая-то библиотека. При попытке ее добавить - идет сообщение об ошибке. Что делать? Можно ли как-то обойти это или нет?
15 сен 11, 16:14    [11282364]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
ptybn84.07
он пишет, что в SQL отсутствует такая-то библиотека


Неплохо бы посмотреть этот еррор, но раз пишет - нет зависимой библы на компе, по видимому...

ptybn84.07
При попытке ее добавить - идет сообщение об ошибке


Опять же - еррор глянуть и добаление добавлению рознь. Как именно предпринимается эта "попытка"?
15 сен 11, 17:47    [11283037]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
ptybn84.07,

ptybn84.07
У меня в dll использованы некоторые библитоеки Microsoft Enterprice Library, в результате при попытке добавить их в SQL вручную(через база-сборки-добавить новую) возникает ошибка - он пишет, что в SQL отсутствует такая-то библиотека. При попытке ее добавить - идет сообщение об ошибке. Что делать? Можно ли как-то обойти это или нет?


Предположим, что в Вашей dll ошибок нет (а это можно проверить подключив её например к простому проекту VB.NET и вызвать чего-нибудь).

На компьютере (сервере), где установлен MS SQL, есть dll(Microsoft Enterprice Library) которые были использованы для создания Вашей dll ?

Если их нет, необходимо их зарегистрировать (каждую dll):
1. скопировав их на компьютер (сервер), в папку Temp, например.
2. Создать батник (*.bat)
regsvr32.exe "C:\Temp\Test.dll"
pause

Обратная операция (раз-регистрация dll), если захочется переметить или изменить название:
regsvr32.exe /u "C:\Temp\Test.dll"
pause

(Вместо Test.dll подставляйте библиотеки Microsoft Enterprice Library, которые использовали.)

А дальше по ссылке 11281344 привязывайте Вашу dll (она одна) на MS SQL.

Это гипотеза. Напишите поможет или нет?
15 сен 11, 21:11    [11283988]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
Попытался через "Добавить сборку" запихать свою dll. SQL написал, что требуются dll-ки, на которые ссылается моя. И так пошло одна за другой требовать. Добавил Выстроилась зависимость - на картинке. Вся проблема в том, что эта dataaccess находится на 2 уровня ниже моей dll. От нее зависит dll, на которую ссылается уже моя. До dataaccess поставились все требуемые ей сборки - а на ней обрыв. Версия Framework у нее 3.5. Из-за этого валится вся цепочка...

К сообщению приложен файл. Размер - 57Kb
16 сен 11, 10:05    [11285269]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
alexejs
Member

Откуда:
Сообщений: 147
http://blogs.msdn.com/b/alexejs/archive/2009/06/14/com-dll-sql-clr.aspx
16 сен 11, 10:28    [11285439]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
Переписал немного по=-другому - сборка встала. Теперь при попытке создать процедуру пишет: "Не удалось обнаружить тип MY_CLASS в сборке MY_ASSEMBLY".
CREATE FUNCTION MY_METHOD
(param1 nvarchar(255)
,param2 nvarchar(255)
,param3 nvarchar(255))
RETURNS nvarchar(255)
EXTRENAL NAME MY_ASSEMBLY.MY_CLASS.MY_METHOD;
go

В чем может быть проблема?
16 сен 11, 12:04    [11286445]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
ptybn84.07
В чем может быть проблема?


Ммм... ну... даже не знаю... В том что в сборке MY_ASSEMBLY нет программной сущности по имени MY_CLASS? Вы б хоть декларацию этого класса привели, что ли...
16 сен 11, 12:14    [11286553]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
Да хоть весь код))
+
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

namespace MyNamesopace
{
    public class MyCerts
    {
        private static int CERT_STORE_PROV_SYSTEM = 10;
        private static int CERT_SYSTEM_STORE_CURRENT_USER = (1 << 16);
        //private static int CERT_SYSTEM_STORE_LOCAL_MACHINE = (2 << 16);

        [DllImport("CRYPT32", EntryPoint = "CertOpenStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr CertOpenStore(
            int storeProvider, int encodingType,
            int hcryptProv, int flags, string pvPara);

        [DllImport("CRYPT32", EntryPoint = "CertEnumCertificatesInStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr CertEnumCertificatesInStore(
            IntPtr storeProvider,
            IntPtr prevCertContext);

        [DllImport("CRYPT32", EntryPoint = "CertCloseStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern bool CertCloseStore(
            IntPtr storeProvider,
            int flags);

        X509Certificate2Collection m_certs;

        public MyCerts()
        {
            m_certs = new X509Certificate2Collection();
        }

        public int Init()
        {
            IntPtr storeHandle;
            storeHandle = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, "MY");
            IntPtr currentCertContext;
            currentCertContext = CertEnumCertificatesInStore(storeHandle, (IntPtr)0);
            int i = 0;
            while (currentCertContext != (IntPtr)0)
            {
                m_certs.Insert(i++, new X509Certificate2(currentCertContext));
                currentCertContext = CertEnumCertificatesInStore(storeHandle, currentCertContext);
            }
            return m_certs.Count;
        }

        public X509Certificate2 this[int index]
        {
            get
            {
                if (index < 0 || index > m_certs.Count)
                    return null;
                else
                    return m_certs[index];
            }
        }
    }
    public class MyClass
    {
        #region Field
        public static CookieContainer cookies = new CookieContainer();
        public static string strURL = string.Empty;
        public static string gtpUrl = string.Empty;
        public static string proxyHost = string.Empty;
        public static int proxyPort = 0;
        public static string proxyUser = string.Empty;
        public static string proxyPassword = string.Empty;
        public static string thumbprint = string.Empty;
        public static string date = string.Empty;
        #endregion

        #region GetCertificate
        public static X509Certificate2 GetCertificate(string strThumbprint)
        {
            X509Certificate2 thisCert = null;
            MyCerts myCert = new MyCerts();
            int certCount = myCert.Init();
            if (certCount > 0)
            {
                for (int i = 0; i < certCount; i++)
                {
                    if (myCert[i].Thumbprint.Equals(strThumbprint))
                    {
                        Console.WriteLine(myCert[i].Subject);
                        thisCert = myCert[i];
                    }
                }
            }
            return thisCert;
        }
        #endregion

        #region GetContent
        public static String GetContent(Stream receiveStream)
        {
            String html = String.Empty;
            StreamReader streamReader = null;
            try
            {
                Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
                //System.Text.Encoding.Default;
                streamReader = new StreamReader(receiveStream, encode);
                Char[] read = new Char[1024];
                int count = streamReader.Read(read, 0, 1024);
                String str = String.Empty;
                while (count > 0)
                {
                    str = new String(read, 0, count);
                    html += str;
                    count = streamReader.Read(read, 0, 1024);
                }
            }
            catch (Exception ex) { throw new Exception(ex.Message); }
            finally { streamReader.Close(); }
            return html;
        }
        #endregion

        #region GetFile
        [Microsoft.SqlServer.Server.SqlProcedure]    
        public static string GetFile(string Url, string filesUrl, string proxy_Host, int proxy_Port, string proxy_User, string proxy_Password, string thumbPrint)
        {
            strURL = Url;
            gtpUrl = filesUrl;
            proxyHost = proxy_Host;
            proxyPort = proxy_Port;
            proxyUser = proxy_User;
            proxyPassword = proxy_Password;
            thumbprint = thumbPrint;            
            ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
            WebProxy webProxy = null;
            HttpWebRequest req = null;
            HttpWebResponse res = null;
            Stream receiveStream = null;
            String content = string.Empty;
            string browser = @"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0)";
            X509Certificate2 workingCert = null;
            string extention = @".xml";
            string fileName = string.Empty;
            int i = 0;           
            Console.WriteLine("First URL " + strURL);
            Console.WriteLine("Second URL " + gtpUrl);
            #region Responce-Request
            if (proxyHost != string.Empty && proxyUser != string.Empty && proxyPassword != string.Empty)
            {
                webProxy = new WebProxy(proxyHost, proxyPort);
                webProxy.Credentials = new NetworkCredential(proxyUser, proxyPassword);
                Console.WriteLine("With Proxy");
            }
            else Console.WriteLine("Without Proxy");
            do
            {
                req = (HttpWebRequest)WebRequest.Create(strURL);
                req.CookieContainer = cookies;
                req.UserAgent = browser;
                if (webProxy != null) req.Proxy = webProxy;
                if (thumbprint != string.Empty)
                    workingCert = GetCertificate(thumbprint);
                if (workingCert != null)
                    req.ClientCertificates.Add(workingCert);

                try
                {
                    Console.WriteLine("Call GetResponse");
                    res = (HttpWebResponse)req.GetResponse();
                }
                catch (Exception ex) { Console.WriteLine("Warning in GetResponce. Error: " + ex.Message); }
                try
                {
                    Console.WriteLine("Call GetResponseStream");
                    receiveStream = res.GetResponseStream();
                }
                catch (Exception ex) { Console.WriteLine("Warning in GetResponceStream. Error: " + ex.Message); }
                try
                {
                    Console.WriteLine("Get content from receiveStream");
                    content = GetContent(receiveStream);
                }
                catch (Exception ex) { Console.WriteLine("Warning in GetContent. Error: " + ex.Message); }
                i++;
                strURL = gtpUrl;
            }
            while (i != 2);
            #endregion

            string calculatedMD5 = MD5Calculator(content);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            Console.WriteLine("MD5: " + calculatedMD5);
            string path = Directory.GetCurrentDirectory();
            string pathToFile = Path.Combine(path, "Temp");
            if (!Directory.Exists(pathToFile)) { Directory.CreateDirectory(pathToFile); }

            fileName = Path.Combine(pathToFile, DateTime.Now.ToString("yyyyMMddHHmm") + extention);
            FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
            using (StreamWriter writer = new StreamWriter(fs))
            {
                content = "<?xml version=\"1.0\" encoding=\"Windows-1251\" ?>" + content;
                writer.Write(content);
                writer.Flush();
            }
            if (fs != null)
            {
                fs.Close();
            }
            return fileName;
        }
        #endregion       

        #region Calculate MD5
        public static string MD5Calculator(string strInput)
        {
            MD5 md5 = MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(strInput);
            byte[] hash = md5.ComputeHash(inputBytes);
            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                strBuilder.Append(hash[i].ToString("X2"));
            }
            return strBuilder.ToString();
        }
        #endregion
    }    
}


Пытаюсь вытащить GetFile из класса MyClass:

CREATE ASSEMBLY BR_ReturnPath
FROM 'C:\!BR_NEW\BR_SQL\BR_ReturnPath.dll'
WITH PERMISSION_SET = UNSAFE
GO

CREATE FUNCTION GetFile
(
@authenticateURL varchar(200)
,@fileURL varchar(200)
,@proxyHost varchar(200)
,@proxyPort int
,@proxyUser varchar(200)
,@proxyPassword varchar(200)
,@thumbprint varchar(200)
)
RETURNS varchar(200)

EXTERNAL NAME BR_ReturnPath.BR_Support.GetFile;
go

Он мне в ответ вышеуказанное
16 сен 11, 12:22    [11286647]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
Класс там не MyClass, а BR_Support естественно.
16 сен 11, 12:23    [11286667]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
ptybn84.07
Класс там не MyClass, а BR_Support естественно.
Так вы бы привели реальный код, просто паст/копи.

А то мало ли какие могут быть ошибки...
16 сен 11, 12:30    [11286756]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
Разница как видите небольшая:
+
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

namespace BR_ReturnPath
{
    public class MyCerts
    {
        private static int CERT_STORE_PROV_SYSTEM = 10;
        private static int CERT_SYSTEM_STORE_CURRENT_USER = (1 << 16);
        //private static int CERT_SYSTEM_STORE_LOCAL_MACHINE = (2 << 16);

        [DllImport("CRYPT32", EntryPoint = "CertOpenStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr CertOpenStore(
            int storeProvider, int encodingType,
            int hcryptProv, int flags, string pvPara);

        [DllImport("CRYPT32", EntryPoint = "CertEnumCertificatesInStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr CertEnumCertificatesInStore(
            IntPtr storeProvider,
            IntPtr prevCertContext);

        [DllImport("CRYPT32", EntryPoint = "CertCloseStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern bool CertCloseStore(
            IntPtr storeProvider,
            int flags);

        X509Certificate2Collection m_certs;

        public MyCerts()
        {
            m_certs = new X509Certificate2Collection();
        }

        public int Init()
        {
            IntPtr storeHandle;
            storeHandle = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, "MY");
            IntPtr currentCertContext;
            currentCertContext = CertEnumCertificatesInStore(storeHandle, (IntPtr)0);
            int i = 0;
            while (currentCertContext != (IntPtr)0)
            {
                m_certs.Insert(i++, new X509Certificate2(currentCertContext));
                currentCertContext = CertEnumCertificatesInStore(storeHandle, currentCertContext);
            }
            return m_certs.Count;
        }

        public X509Certificate2 this[int index]
        {
            get
            {
                if (index < 0 || index > m_certs.Count)
                    return null;
                else
                    return m_certs[index];
            }
        }
    }
    public class BR_Support
    {
        #region Field
        public static CookieContainer cookies = new CookieContainer();
        public static string strURL = string.Empty;
        public static string gtpUrl = string.Empty;
        public static string proxyHost = string.Empty;
        public static int proxyPort = 0;
        public static string proxyUser = string.Empty;
        public static string proxyPassword = string.Empty;
        public static string thumbprint = string.Empty;
        public static string date = string.Empty;
        #endregion

        #region GetCertificate
        public static X509Certificate2 GetCertificate(string strThumbprint)
        {
            X509Certificate2 thisCert = null;
            MyCerts myCert = new MyCerts();
            int certCount = myCert.Init();
            if (certCount > 0)
            {
                for (int i = 0; i < certCount; i++)
                {
                    if (myCert[i].Thumbprint.Equals(strThumbprint))
                    {
                        Console.WriteLine(myCert[i].Subject);
                        thisCert = myCert[i];
                    }
                }
            }
            return thisCert;
        }
        #endregion

        #region GetContent
        public static String GetContent(Stream receiveStream)
        {
            String html = String.Empty;
            StreamReader streamReader = null;
            try
            {
                Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
                //System.Text.Encoding.Default;
                streamReader = new StreamReader(receiveStream, encode);
                Char[] read = new Char[1024];
                int count = streamReader.Read(read, 0, 1024);
                String str = String.Empty;
                while (count > 0)
                {
                    str = new String(read, 0, count);
                    html += str;
                    count = streamReader.Read(read, 0, 1024);
                }
            }
            catch (Exception ex) { throw new Exception(ex.Message); }
            finally { streamReader.Close(); }
            return html;
        }
        #endregion

        #region GetFile
        [Microsoft.SqlServer.Server.SqlProcedure]    
        public static string GetFile(string Url, string filesUrl, string proxy_Host, int proxy_Port, string proxy_User, string proxy_Password, string thumbPrint)
        {
            strURL = Url;
            gtpUrl = filesUrl;
            proxyHost = proxy_Host;
            proxyPort = proxy_Port;
            proxyUser = proxy_User;
            proxyPassword = proxy_Password;
            thumbprint = thumbPrint;            
            ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
            WebProxy webProxy = null;
            HttpWebRequest req = null;
            HttpWebResponse res = null;
            Stream receiveStream = null;
            String content = string.Empty;
            string browser = @"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0)";
            X509Certificate2 workingCert = null;
            string extention = @".xml";
            string fileName = string.Empty;
            int i = 0;           
            Console.WriteLine("First URL " + strURL);
            Console.WriteLine("Second URL " + gtpUrl);
            #region Responce-Request
            if (proxyHost != string.Empty && proxyUser != string.Empty && proxyPassword != string.Empty)
            {
                webProxy = new WebProxy(proxyHost, proxyPort);
                webProxy.Credentials = new NetworkCredential(proxyUser, proxyPassword);
                Console.WriteLine("With Proxy");
            }
            else Console.WriteLine("Without Proxy");
            do
            {
                req = (HttpWebRequest)WebRequest.Create(strURL);
                req.CookieContainer = cookies;
                req.UserAgent = browser;
                if (webProxy != null) req.Proxy = webProxy;
                if (thumbprint != string.Empty)
                    workingCert = GetCertificate(thumbprint);
                if (workingCert != null)
                    req.ClientCertificates.Add(workingCert);

                try
                {
                    Console.WriteLine("Call GetResponse");
                    res = (HttpWebResponse)req.GetResponse();
                }
                catch (Exception ex) { Console.WriteLine("Warning in GetResponce. Error: " + ex.Message); }
                try
                {
                    Console.WriteLine("Call GetResponseStream");
                    receiveStream = res.GetResponseStream();
                }
                catch (Exception ex) { Console.WriteLine("Warning in GetResponceStream. Error: " + ex.Message); }
                try
                {
                    Console.WriteLine("Get content from receiveStream");
                    content = GetContent(receiveStream);
                }
                catch (Exception ex) { Console.WriteLine("Warning in GetContent. Error: " + ex.Message); }
                i++;
                strURL = gtpUrl;
            }
            while (i != 2);
            #endregion

            string calculatedMD5 = MD5Calculator(content);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            Console.WriteLine("MD5: " + calculatedMD5);
            string path = Directory.GetCurrentDirectory();
            string pathToFile = Path.Combine(path, "Temp");
            if (!Directory.Exists(pathToFile)) { Directory.CreateDirectory(pathToFile); }

            fileName = Path.Combine(pathToFile, DateTime.Now.ToString("yyyyMMddHHmm") + extention);
            FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
            using (StreamWriter writer = new StreamWriter(fs))
            {
                content = "<?xml version=\"1.0\" encoding=\"Windows-1251\" ?>" + content;
                writer.Write(content);
                writer.Flush();
            }
            if (fs != null)
            {
                fs.Close();
            }
            return fileName;
        }
        #endregion       

        #region Calculate MD5
        public static string MD5Calculator(string strInput)
        {
            MD5 md5 = MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(strInput);
            byte[] hash = md5.ComputeHash(inputBytes);
            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                strBuilder.Append(hash[i].ToString("X2"));
            }
            return strBuilder.ToString();
        }
        #endregion
    }    
}
16 сен 11, 12:36    [11286808]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
ptybn84.07
EXTERNAL NAME BR_ReturnPath.BR_Support.GetFile;


EXTERNAL NAME BR_ReturnPath.BR_ReturnPath.[BR_Support].GetFile

Ы?
16 сен 11, 12:51    [11286950]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
ptybn84.07
EXTERNAL NAME BR_ReturnPath.BR_Support.GetFile;


EXTERNAL NAME BR_ReturnPath.[BR_ReturnPath.BR_Support].GetFile

Ы?
16 сен 11, 12:53    [11286976]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
SamMan
ptybn84.07
EXTERNAL NAME BR_ReturnPath.BR_Support.GetFile;


EXTERNAL NAME BR_ReturnPath.[BR_ReturnPath.BR_Support].GetFile

Ы?

Огромное спасибо! Не знаю, как тут в репу добавить, а то с удовольствием добавил бы +))
16 сен 11, 13:10    [11287139]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
Возникла другая ошибка при попытке использовать метод, отправив туда параметры. Выкидывает ошибку:
Сообщение 10314, уровень 16, состояние 11, строка 3
Ошибка Microsoft .NET Framework при попытке загрузить сборку с идентификатором 65667. Возможно, на сервере заканчиваются ресурсы, либо для сборки не установлено доверие при помощи PERMISSION_SET = EXTERNAL_ACCESS или UNSAFE. Повторите запрос или обратитесь к документации за рекомендациями по решению проблем с доверием для сборок. Дополнительные сведения об этой ошибке: 
System.IO.FileLoadException: Невозможно загрузить файл или сборку "br_returnpath, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Данное имя сборки или база кода недействительны. (Исключение из HRESULT: 0x80131047)
System.IO.FileLoadException: 
   в System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
   в System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   в System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   в System.Reflection.Assembly.Load(String assemblyString)
В чем может быть проблема?
16 сен 11, 16:24    [11289324]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
ptybn84.07
В чем может быть проблема?


Ну... сложно так, заочно, сказать. Соотнесите, к примеру, целевую платформу (x86/x64) под которую вы компилите BR_ReturnPath.dll и платформу на которой крутится SQL Server в который вы BR_ReturnPath.dll заливаете. Приведете в соответствие первую ко второй, если требуется.
16 сен 11, 16:49    [11289538]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
Glory
Member

Откуда:
Сообщений: 104751
Что из этого
"Возможно, на сервере заканчиваются ресурсы,
либо для сборки не установлено доверие при помощи PERMISSION_SET = EXTERNAL_ACCESS или UNSAFE."

вы проверили ?
16 сен 11, 17:44    [11290076]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
Платформа сервака x64. Моя - 86. В настройках посавил дебюг и релиз x64 - ничего не изменилось. Т.е. сборка ставится, метод вытаскивается и создается функция на его основе - а при попытке вызвать, введя парамерты - ошибка(((

USE Storage 
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetFile]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[GetFile]
IF  EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'BR_ReturnPath' and is_user_defined = 1)
DROP ASSEMBLY [BR_ReturnPath] 
GO


USE master
GRANT UNSAFE ASSEMBLY TO sa 
go
alter database [Storage] set trustworthy on 
go


use Storage
CREATE ASSEMBLY BR_ReturnPath
FROM 'C:\!BR_NEW\BR_SQL\BR_ReturnPath.dll'
WITH PERMISSION_SET = UNSAFE
GO
CREATE FUNCTION GetFile
(
@authenticateURL nvarchar(255)
,@fileURL nvarchar(255)
,@proxyHost nvarchar(255)
,@proxyPort int
,@proxyUser nvarchar(255)
,@proxyPassword nvarchar(255)
,@thumbprint nvarchar(255)
)
RETURNS nvarchar(255)
EXTERNAL NAME BR_ReturnPath.BR_Support.GetFile;
go


declare @result nvarchar(255)
set @result = dbo.GetFile('https://br.so-ups.ru:444/Public/SSL/LoginByCert.aspx',
                          'https://br.so-ups.ru:444/Export/Xml/Gtp.aspx?date=2011.09.12>pIds=GLIPECK1,GLIPECK2,GLIPEC10,GLIPECK3,GTAMBOV1,GTAMBOV2',
                          'squid.tgk-4.ru',
                          3128,
                          'CSTI-CS',
                          'sde486t',
                          '4C0389A3818380240E2AACA6B9BF7523AA088587') select @result
print @result

Ошибка
+

Невозможно предоставить, запретить или отменить разрешения sa, dbo, владельцу сущности, information_schema, sys или самому себе.
Сообщение 10314, уровень 16, состояние 11, строка 4
Ошибка Microsoft .NET Framework при попытке загрузить сборку с идентификатором 65690. Возможно, на сервере заканчиваются ресурсы, либо для сборки не установлено доверие при помощи PERMISSION_SET = EXTERNAL_ACCESS или UNSAFE. Повторите запрос или обратитесь к документации за рекомендациями по решению проблем с доверием для сборок. Дополнительные сведения об этой ошибке:
System.IO.FileLoadException: Невозможно загрузить файл или сборку "br_returnpath, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Данное имя сборки или база кода недействительны. (Исключение из HRESULT: 0x80131047)
System.IO.FileLoadException:
в System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
в System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
в System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
в System.Reflection.Assembly.Load(String assemblyString)
19 сен 11, 10:32    [11296456]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
ptybn84.07
В настройках посавил дебюг и релиз x64 - ничего не изменилось.


Хмм... А там, в сборке вашей, импортится что-то типа CRYPT32. Это что? Откуда берется?
19 сен 11, 11:02    [11296645]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
ptybn84.07
Member

Откуда:
Сообщений: 69
SamMan,

Это я вытаскиваю сертификаты для того, чтобы залогиниться и скачать файлы. Я сейчас расписал через X509Storage. Так вот самое интересное, что при вытаскивании
 
            X509Certificate2 thisCert = null;
            X509Store store = new X509Store(StoreName.My,StoreLocation.LocalMachine);
            store.Open(OpenFlags.OpenExistingOnly);
            X509Certificate2Collection collCert = store.Certificates.Find(X509FindType.FindByThumbprint,strThumbprint,true);
            if (collCert.Count > 0)
            {
                thisCert = collCert[0];
            }
значение store.Count равно 0... При этом при использовании dll в стороннем приложении все прекрасно скачивается(сертификаты вытаскиваются и выбирается рабочий), а когда я через SQL management запросом пытаюсь получить данные - он не может вытащить сертификаты. Везде значение Count равно 0, и у store, и у, разумеется, collCert.
Может SQL как-то настроить надо, а то ему прав на получение сертификатов не дали? Или в чем другом?
19 сен 11, 11:56    [11297072]     Ответить | Цитировать Сообщить модератору
 Re: assembly  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
ptybn84.07
а когда я через SQL management запросом пытаюсь получить данные - он не может вытащить сертификаты. Везде значение Count равно 0, и у store, и у, разумеется, collCert.


Я не понял, ошибка
Ошибка Microsoft .NET Framework при попытке загрузить сборку с идентификатором 65690 и т.д....

уже побеждена? Раз мы в принципе способны анализировать результаты работы метода?
19 сен 11, 13:27    [11297954]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить