Используйте объект CLR в SQL Server 2005 появляется сообщение об ошибке: «Не удается загрузить динамически создаваемой сборки сериализации»

Переводы статьи Переводы статьи
Код статьи: 913668 - Vizualiza?i produsele pentru care se aplic? acest articol.
Номер ошибки: 101935 (SQLBUDT)
Развернуть все | Свернуть все

В этой статье

Проблема

При использовании общего объекта общеязыковой среды выполнения (CLR) языка в Microsoft SQL Server 2005 появляется сообщение об ошибке следующее:
Сообщение 6522, уровень 16, состояние 2, строка 1
A .NET Framework ошибка во время выполнения определяемой пользователем подпрограммы или Статистическая обработка «ИмяОбъекта»:
System.InvalidOperationException: Не удается загрузить динамически создаваемой сборки сериализации. В некоторых средах размещения ограниченные функциональные возможности загрузки сборки, следует рассмотреть возможность использования предварительно создаются сериализатор. Пожалуйста, ознакомьтесь с внутренним исключением для получения дополнительных сведений. ---> System.IO.FileLoadException: LoadFrom(), LoadFile(), Load(byte[]) и LoadModule() были отключены в основном приложении.
System.IO.FileLoadException:
в System.Reflection.Assembly.nLoadImage (Byte [] rawAssembly, Byte] rawSymbolStore, свидетельство свидетельства, StackCrawlMark & stackMark, логическое значение fIntrospection)
в System.Reflection.Assembly.Load (rawAssembly Byte [], Byte [] rawSymbolStore securityEvidence свидетельства)
в Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch (CompilerParameters параметры Строка, имена файлов [])
в Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch (CompilerParameters параметры источников String [])
в Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch (CompilerParameters параметры источников String [])
в System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource (CompilerParameters параметры s String]
...
System.InvalidOperationException:
в System.XML.Serialization.Compiler.Compile (родительской сборки, строка ns Параметры CompilerParameters свидетельств свидетельство)
в System.XML.Serialization.TempAssembly.GenerateAssembly (XmlMapping] xmlMappings, типа [] types, строка defaultNamespace, свидетельство свидетельства Параметры CompilerParameters, сборка сборки Hashtable сборки)
в System.XML.Serialization.TempAssembly...ctor (XmlMapping xmlMappings [], [тип] типы, defaultNamespace строка, строка расположения, свидетельство свидетельства)
в System.XML.Serialization.XmlSerializer.GenerateTempAssembly (XmlMapping xmlMapping, тип тип String defaultNamespace)
в System.XML.Serialization.XmlSerializer...ctor (типа type, строка defaultNamespace)
в System.Xml.Serialization.XmlSe...
Для пример, появляется сообщение об ошибке при использовании объекта среды CLR, который вызывает веб-службы или выполняет преобразование определяемые пользователем типы в XML внутри SQL Сервер.

Причина

Эта проблема возникает, когда объект CLR преобразуется в XML Тип данных. Это преобразование происходит, Windows Communication Foundation (предыдущее кодовое название «Indigo») пытается выполнить следующие действия:
  • Создайте новую сборку сериализации XML.
  • Сохраните сборки на диске.
  • Загрузка сборки в текущий домен приложения.
Однако SQL Server не допускает такого рода доступа к диску в целях безопасности CLR SQL. Таким образом появляется сообщение об ошибке описанного в разделе «Проблема». Несколько сценариев может привести к Объект среды CLR для преобразования в тип данных XML.

Для получения дополнительных сведений о Windows Communication Foundation посетите следующие корпорации Майкрософт Developer Network (MSDN) веб-узла:
http://msdn2.Microsoft.com/en-us/library/ms735119.aspx
Может появиться сообщение об ошибке, описанное в Раздел «Проблема» в следующих случаях:
  • Использует код CLR, явно реализующего объекты среды CLR очередь XmlSerializer класс. Эти объекты CLR могут включать хранимые процедуры функции, определяемые пользователем типы, статистические функции и триггеры.
  • С помощью веб-службы в коде среды CLR.
  • Отправлять или получать объекты CLR SQL Server с помощью прямого доступа HTTP/SOAP в SQL Server.
  • Преобразует объект CLR определяемого пользователем типа данных XML тип.

Решение

Чтобы устранить эту проблему, необходимо использовать сериализатор XML Средство создания (Sgen.exe), чтобы создать сборку сериализации XML для исходные сборки вручную. Затем загрузите сборки в SQL Server База данных.

Пример кода

Например может понадобиться создать функции среды CLR, которая возвращает XML-данные с помощью сборки, которая создается в следующем примере кода:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;   
using System.Xml;
using System.Xml.Serialization;
using System.Text;
using System.IO;
public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static  SqlString XMLTest()
    {
        Person p = new Person();
        return new SqlString(p.GetXml());
        
    }
    public class Person
    { 
        public String m_FirstName = "Jane";
        public String m_LastName = "Dow";

        public String GetXml()
        {
          XmlSerializer ser = new XmlSerializer(typeof(Person));
          StringBuilder sb = new StringBuilder();
          StringWriter wr = new StringWriter(sb);
            ser.Serialize(wr, this);

            return sb.ToString();
        }

    }
}
При вызове метода XMLTest функция в SQL Server Management Studio, ожидается получение Следующий результат:
<?xml version="1.0" encoding="utf-16"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m_FirstName>Jane</m_FirstName>
<m_LastName>Dow</m_LastName>  
</Person>
Чтобы вернуть правильный результат, необходимо вручную создать XML Сборка сериализации для исходной сборки. Используйте один из следующих методы, чтобы создать сборку сериализации вручную.

Примечание Эти методы предполагают, что выполняются следующие условия:
  • Вы создали dbTest базы данных в экземпляре SQL Server 2005.
  • Все файлы проекта сохраняются в C:\CLRTest папка.

Метод 1: Построение проекта SQL Server со средой CLR с помощью Microsoft Visual Studio 2005

Можно создать сборку сериализации с помощью События построения параметр в Microsoft Visual Studio 2005. Чтобы сделать это, выполните следующие действия:
  1. Запустите Visual Studio 2005.
  2. Создайте новый проект SQL Server с именем MyTest.
  3. В Добавить ссылку на базу данных диалоговое окно, Щелкните ссылку, которая подключается к dbTest базы данных, а затем нажмите кнопку ОК.

    Если ссылка не в списке, необходимо создать новую ссылку. Чтобы сделать это, Нажмите кнопку Добавить новую ссылку.
  4. На Проект меню, нажмите кнопку Добавить Определяемая пользователем функция. В Добавление нового элемента «Свойства системы» появится.
  5. Нажмите кнопку Добавить Чтобы добавить новый файл. По умолчанию файл имеет имя Function1.cs.

    Примечание Появляется сообщение об ошибке, описанное в разделе «Проблема» Если развернуть проект базы данных, а затем запустите следующий раздел Инструкция Transact-SQL:
    SELECT [dbTest].[dbo].[XMLTest] ()
    Выполните шаги 6-16 для решения этой проблемы.
  6. Добавьте код, который приведен в разделе «Пример» в файле Function1.cs.
  7. На Проект меню, нажмите кнопку MyTest Свойства.
  8. На MyTest диалоговое окно, нажмите кнопкуСобытия построения параметр.
  9. Введите следующую команду в Событие после построения Параметры поле:
    «C:\Program files\microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe» / force "$ (TargetPath)»
    Примечание В / Force Создает новую сборку сериализации каждый раз, что вы Изменение исходной сборки. Кроме того, необходимо изменить эту команду, если вы установки Visual Studio 2005 в другую папку.
  10. В папке C:\CLRTest создайте два текстовых файла, которые являются с именем Predeployscript.sql и Postdeployscript.sql.
  11. Добавьте следующие инструкции Transact-SQL для Файл Predeployscript.SQL:
    IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'MyTest.XmlSerializers') 
    	DROP ASSEMBLY [MyTest.XmlSerializers]
    
  12. Добавьте следующие инструкции Transact-SQL для Файл Postdeployscript.SQL:
    CREATE ASSEMBLY [MyTest.XmlSerializers] from
    'C:\CLRTest\MyTest\MyTest\bin\Debug\MyTest.XmlSerializers.dll'
    WITH permission_set = SAFE
    
  13. На Проект меню, нажмите кнопку Добавить Существующий элемент.
  14. В Добавление существующего элемента диалоговое окно, Перейдите в папку C:\CLRTest и нажмите кнопку Все файлы (*. *)В диалоговом окне Тип файлов список.
  15. В Имя файла поле типаPostdeployscript.SQL;Predeployscript.SQL, а затем нажмите кнопкуОК.
  16. На Построение меню, нажмите кнопку Развертывание MyTest.
  17. Выполните следующую инструкцию Transact-SQL в SQL Server Среда Management Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    Получить правильный результат.

Способ 2: Построения проекта SQL CLR в окне командной строки Visual Studio

  1. Перейдите в папку C:\CLRTest.
  2. Создайте текстовый файл с именем MyTest.cs.
  3. Добавьте код, который приведен в разделе «Пример» в файле MyTest.cs.
  4. Откройте окно командной строки Visual Studio 2005.
  5. Тип C:\CLRTest компакт-диска, а затем нажмите клавишу ВВОД.
  6. Тип CSC /t:library MyTest.cs, и Нажмите клавишу ВВОД.
  7. Тип / FORCE SGen.exe MyTest.dll, и Нажмите клавишу ВВОД.
  8. Выполните следующие инструкции Transact-SQL в SQL Server Среда Management Studio:
    USE dbTest
    GO
    CREATE ASSEMBLY [MyTest] from 'C:\CLRTest\MyTest.dll'
    GO
    CREATE ASSEMBLY [MyTest.XmlSerializers.dll] from 'C:\CLRTest\MyTest.XmlSerializers.dll'
    GO
    
    CREATE FUNCTION XMLTest()
    RETURNS nvarchar (max)
    AS
    EXTERNAL NAME MyTest.StoredProcedures.XMLTest
    GO
  9. Выполните следующую инструкцию Transact-SQL в SQL Server Среда Management Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    Получить правильный результат.

Если использовать основную сборку, которая ссылается на другие сборки, необходимо создать сборки сериализации XML для всех сборок, на которые ссылается основной сборки. Затем нужно загрузить эти сборки сериализации XML в базу данных SQL Server с помощью инструкции CREATE ASSEMBLY.

Статус

Это поведение является особенностью.

Ссылки

Для получения дополнительных сведений о сериализации XML из среды CLR объектов базы данных, веб-узле MSDN по адресу:
http://msdn2.Microsoft.com/en-us/library/ms131088.aspx
Для получения дополнительных сведений о средстве XML Serializer Generator посетите веб-узле MSDN:
http://msdn2.Microsoft.com/en-us/library/bk3w6240.aspx

Свойства

Код статьи: 913668 - Последний отзыв: 18 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Ключевые слова: 
kbsql2005clr kbexpertiseadvanced kbprb kbmt KB913668 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:913668

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com