Μήνυμα λάθους όταν χρησιμοποιείτε ένα κοινό αντικειμένου χρόνου εκτέλεσης γλώσσας του SQL Server 2005: "Δεν είναι δυνατή η φόρτωση της συγκρότησης σειριοποίησης που δημιουργήθηκε δυναμικά"

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 913668 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Σφάλμα #: 101935 (SQLBUDT)
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Συμπτώματα

Όταν χρησιμοποιείτε ένα κοινό αντικείμενο κατά το χρόνο εκτέλεσης (CLR) γλώσσας του Microsoft SQL Server 2005, ενδέχεται να λάβετε ένα μήνυμα λάθους παρόμοιο με το ακόλουθο:
Msg 6522, επίπεδο 16, κατάσταση 2, γραμμή 1
Παρουσιάστηκε ένα σφάλμα .NET Framework κατά την εκτέλεση της ρουτίνας ορισμένο από το χρήστη ή συγκεντρωτικών αποτελεσμάτων 'ObjectName':
System.InvalidOperationException: Δεν είναι δυνατή η φόρτωση συγκρότησης σειριοποίησης που δημιουργήθηκε δυναμικά. Σε ορισμένες συγκρότησης περιβάλλον φιλοξενίας περιορίζεται λειτουργίες φόρτωσης, μπορείτε να χρησιμοποιήσετε το προδημιουργημένο πρόγραμμα σειριοποίησης. Ανατρέξτε στην εσωτερική εξαίρεση για περισσότερες πληροφορίες. ---> System.IO.FileLoadException: LoadFrom(), LoadFile(), Load(byte[]) και LoadModule() έχουν απενεργοποιηθεί από τον κεντρικό υπολογιστή.
System.IO.FileLoadException:
στο System.Reflection.Assembly.nLoadImage (Byte [] rawAssembly, Byte [] rawSymbolStore, αποδείξεις αποδείξεις, StackCrawlMark & stackMark, Boolean fIntrospection)
στο System.Reflection.Assembly.Load (Byte [] rawAssembly, Byte [] rawSymbolStore, securityEvidence αποδείξεις)
στο Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch (CompilerParameters επιλογές, ονόματα αρχείων [] συμβολοσειρά)
στο Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch (CompilerParameters επιλογές συμβολοσειρών πηγές [])
στο Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch (CompilerParameters επιλογές συμβολοσειρών πηγές [])
στο System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource (CompilerParameters επιλογές, String [] s
...
System.InvalidOperationException:
στο System.Xml.Serialization.Compiler.Compile (γονική υλικών, String ns, CompilerParameters παραμέτρους, αποδείξεις αποδείξεις)
στο System.Xml.Serialization.TempAssembly.GenerateAssembly (XmlMapping xmlMappings [], τύπος [] τύπους, defaultNamespace συμβολοσειράς, αποδείξεις αποδείξεις, CompilerParameters παραμέτρους, υλικών συναρμολόγησης, συγκροτήσεις Hashtable)
στο System.Xml.Serialization.TempAssemblyctor (XmlMapping xmlMappings [], τύπος τύπους [], defaultNamespace συμβολοσειρά, συμβολοσειρά θέσης, αποδείξεις αποδείξεις)
στο System.Xml.Serialization.XmlSerializer.GenerateTempAssembly (XmlMapping xmlMapping, πληκτρολογήστε τον τύπο, defaultNamespace String)
στο System.Xml.Serialization.XmlSerializerctor (πληκτρολογήστε τον τύπο, συμβολοσειρών defaultNamespace)
στο System.Xml.Serialization.XmlSe...
Για παράδειγμα, ενδέχεται να λάβετε το μήνυμα λάθους, όταν χρησιμοποιείτε ένα αντικείμενο CLR που καλεί μια υπηρεσία Web ή εκτελεί μετατροπή από το χρήστη τύπους σε XML στο εσωτερικό του SQL Server.

Αιτία

Αυτό το ζήτημα παρουσιάζεται όταν ένα αντικείμενο CLR μετατρέπεται σε XML του τύπου δεδομένων. When this conversion occurs, the Windows Communication Foundation (formerly code-named "Indigo") tries to do the following:
  • Generate a new XML serialization assembly.
  • Save the assembly to disk.
  • Load the assembly into the current application domain.
However, SQL Server does not allow for this kind of disk access in the SQL CLR for security reasons. Therefore, you receive the error message that is mentioned in the "Symptoms" section. Several scenarios may cause the CLR object to be converted to the XML data type.

For more information about the Windows Communication Foundation, visit the following Microsoft Developer Network (MSDN) Web site:
http://msdn2.Microsoft.com/en-us/library/ms735119.aspx
You may receive the error message that is mentioned in the "Symptoms" section in the following scenarios:
  • The CLR code that implements CLR objects explicitly uses theXmlSerializerCLASS. These CLR objects may include stored procedures, functions, user-defined types, aggregates, and triggers.
  • You use a Web service in the CLR code.
  • You send or receive CLR objects to or from SQL Server by using direct HTTP/SOAP access to SQL Server.
  • The CLR object converts a user-defined type to the XML data type.

Προτεινόμενη αντιμετώπιση

To resolve this issue, you must use the XML Serializer Generator tool (Sgen.exe) to create the XML serialization assembly for the original assembly manually. Then, load the assemblies into a SQL Server database.

Code example

For example, you may want to create a CLR function that returns XML data by using an assembly that is created by the following code example:
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();
        }

    }
}
Κατά την κλήση τουXMLTestfunction in SQL Server Management Studio, you expect to receive the following result:
<?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>
To return the correct result, you must manually create the XML serialization assembly for the original assembly. Use one of the following methods to create the serialization assembly manually.

ΣΗΜΕΙΩΣΗThese methods assume that the following conditions are true:
  • You have created adbTestdatabase in an instance of SQL Server 2005.
  • All the project files are saved in the C:\CLRTest folder.

Method 1: Build a SQL Server CLR project by using Microsoft Visual Studio 2005

You can create the serialization assembly by using theBuild Eventsoption in Microsoft Visual Studio 2005. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα: (Use the tools in the Windows Recovery Environment to repair Windows Vista. To do this, follow these steps:):
  1. Εκκίνηση του Visual Studio 2005.
  2. Create a new SQL Server project that is named MyTest.
  3. ΣτοAdd Database Referencedialog box, click the reference that connects to thedbTestdatabase, and then clickOk.

    If the reference is not in the list, you must create a new reference. To do this, clickAdd New Reference.
  4. Στο διακομιστήΤο έργομενού, κάντε κλικ στο κουμπίAdd User-Defined Function. Για ναΠροσθήκη νέου στοιχείουεμφανίζεται το παράθυρο διαλόγου.
  5. Κάντε κλικADDto add a new file. By default, the file is named Function1.cs.

    ΣΗΜΕΙΩΣΗYou receive the error message that is mentioned in the "Symptoms" section if you deploy the project to the database and then run the following Transact-SQL statement:
    SELECT [dbTest].[dbo].[XMLTest] ()
    You must follow steps 6-16 to resolve this issue.
  6. Add the code that is listed in the "Code example" section to the Function1.cs file.
  7. Στο διακομιστήΤο έργομενού, κάντε κλικ στο κουμπίMyTest Properties.
  8. Στο διακομιστήMyTestπαράθυρο διαλόγου, κάντε κλικ στοBuild EventsΕπιλογή.
  9. Πληκτρολογήστε την ακόλουθη εντολή στο στοPost-build event command line"Τύπος" (Type):
    "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe" /force "$(TargetPath)"
    ΣΗΜΕΙΩΣΗΓια να/Forceoption generates a new serialization assembly every time that you modify the source assembly. Additionally, you must modify this command if you installed Visual Studio 2005 in another folder.
  10. In the C:\CLRTest folder, create two text files that are named Predeployscript.sql and Postdeployscript.sql.
  11. Add the following Transact-SQL statements to the Predeployscript.sql file:
    IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'MyTest.XmlSerializers') 
    	DROP ASSEMBLY [MyTest.XmlSerializers]
    
  12. Add the following Transact-SQL statements to the Postdeployscript.sql file:
    CREATE ASSEMBLY [MyTest.XmlSerializers] from
    'C:\CLRTest\MyTest\MyTest\bin\Debug\MyTest.XmlSerializers.dll'
    WITH permission_set = SAFE
    
  13. Στο διακομιστήΤο έργομενού, κάντε κλικ στο κουμπίAdd Existing Item.
  14. ΣτοAdd Existing Itemdialog box, locate the C:\CLRTest folder, and then clickΌλα τα αρχεία (*. *)ΣτοΑρχεία τύπουΛίστα (List).
  15. ΣτοΌνομα αρχείουπληκτρολογήστεPostdeployscript.sql;Predeployscript.sql, και στη συνέχεια κάντε κλικ στο κουμπίOk.
  16. Στο διακομιστήΔημιουργίαμενού, κάντε κλικ στο κουμπίDeploy MyTest.
  17. Run the following Transact-SQL statement in SQL Server Management Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    You receive the correct result.

Method 2: Build a SQL CLR project at the Visual Studio Command Prompt window

  1. Locate the C:\CLRTest folder.
  2. Create a text file that is named MyTest.cs.
  3. Add the code that is listed in the "Code example" section to the MyTest.cs file.
  4. Open the Visual Studio 2005 Command Prompt window.
  5. TYPECD C:\CLRTestκαι κατόπιν πατήστε το πλήκτρο ENTER.
  6. TYPEcsc /t:library MyTest.csκαι κατόπιν πατήστε το πλήκτρο ENTER.
  7. TYPESGen.exe /force MyTest.dllκαι κατόπιν πατήστε το πλήκτρο ENTER.
  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 στο Web:
http://msdn2.Microsoft.com/en-us/library/ms131088.aspx
Για περισσότερες πληροφορίες σχετικά με το εργαλείο δημιουργία σειριοποιητής XML, επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:
http://msdn2.Microsoft.com/en-us/library/bk3w6240.aspx

Ιδιότητες

Αναγν. άρθρου: 913668 - Τελευταία αναθεώρηση: Παρασκευή, 24 Δεκεμβρίου 2010 - Αναθεώρηση: 2.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 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: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