Obsługa typu danych xml i typy zdefiniowane przez użytkownika CLR
This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.
W zaczyna się od macierzysty usług XML sieci Web SQL Server 2005, takich jak przekazywanie typów xml Typ danych lub powszechnymi typami języka (CLR) w czasie wykonywania przez użytkownika wymaga niektóre zadania dodatkowe rozwoju. W tym temacie opisano zadania, należy wykonać, aby umożliwić aplikacji opartych na usług XML sieci Web do pracy z xml i zdefiniowany przez użytkownika typ danych CLR w sieci Web, metody i kwerend parametrycznych.
Uwaga
Zakłada się, że podstawowa wiedza wdrażania macierzysty usług XML sieci Web w SQL Server. Dotyczy to również jest zaznajomiony z zadania, takie jak tworzenie punktów końcowych, narażają programowania SQL jako metody sieci Web i podstawowe aplikacje klienckie w sieci Web do pisania SQL Server wykorzystujących inne wbudowane typy SQL. Jeśli chcesz przejrzeć te informacje, zobacz Pojęcia dotyczące usług macierzystych sieci Web XML, Wdrażanie macierzysty usług XML sieci Web, a Najważniejsze wskazówki dotyczące przy użyciu usług sieci Web XML w trybie macierzystym.
Obsługa typu danych w aplikacji klient sieci Web xml
Dla aplikacji klient sieci Web poprawnie xml Typ danych, niektóre szczegóły zależeć której z poniższych scenariuszy dotyczy:
Podczas pracy z procedura przechowywana, która jest dostępny jako metoda sieci Web dla punktu końcowego.
Korzystanie z (instancji SQLsqlbatch) Funkcja punktu końcowego, aby wykonać kwerendę parametryczną.
Oba te scenariusze wymagają sparametryzowana wystąpień xml Typ danych mają być przetwarzane za pomocą oraz wypełnianie myEndpoint**:: struktura** xml.W tej struktury. myEndpoint reprezentuje rzeczywistą nazwę punktu końcowego, który jest używany podczas wystąpienia xml Typ danych są przekazywane za pomocą kodu po stronie klient. Ta struktura jest zadeklarowany w punkcie końcowym klasy serwera proxy w sieci Web.
The myEndpoint**::xml** structure is created when you add or update the Web reference to the endpoint that exposes the Web metoda in the Visual Studio project. Jednak trzeba wypełnić wstępnego generowane myEndpoint**:: struktura** xml w niestandardowej klasy serwera proxy w sieci Web w związku z tym oparte na czy korzystasz z wpisaną XML lub bez typu XML w kodzie aplikacji klient.
Dla untyped xml Typ danych parametru wystąpienia w sieci Web metod, myEndpoint**:: struktura** xml opisuje je w postaci tablicy typu System.Xml.XmlNode klasy proxy.Dlatego też przenieść xml wystąpienie parametru typu danych, można ręcznie utworzyć i wypełnić tablicy węzłów XML lub najlepiej korzystać System.Xml.XmlDocumentFragment w tym celu.Aby uzyskać więcej informacji zobaczPraca z danych xml typ danych w aplikacji klient programu Visual Studio.
Aby wpisać xml Typ niestandardowy metody sieci Web jest generowany w klasie serwera proxy w sieci Web i nazwany zgodnie z następującym formatem: połączenie wyraz nazwy metodaType a następnie następuje nazwa parametru. Na przykład, jeśli metoda sieci Web jest dostępny przy użyciu nazwy GetXmlInfo i przejście xml Typ danych parametru o nazwie T do przechodzenia wpisany XML jako danych wejściowych, będzie nazwę niestandardowego typu narażonych klasy serwera proxy w sieci Web GetXmlInfoTypeT. Ten typ niestandardowy dziedziczy myEndpoint**:: struktury** xml, w związku z tym on podobnie udostępnia wpisywanych XML w postaci tablicy System.Xml.XmlNode.
Obsługa xml Typ danych w kwerendach parametrycznych jest podobna do pracy z xml Typ danych w sieci Web metod z jednym wyjątkiem: wpisany kod XML muszą być przekazane od klient przy użyciu tego samego typu (myEndpoint**:: xml**), jest używana z danymi XML bez typu.
Po myEndpoint**:: struktura** xml jest gotowa, xml dane wystąpienie typu następnie może być udostępniany jako tablica System.Xml.XmlNode jest z kolei zawarte w obrębie w ramach struktury zdefiniowane, aSqlParameter.Value obiekt.
Kwerendy parametryczne wymaga funkcji partia SQL.Może to wymagać następujące dodatkowe wymagania:
Punkt końcowy musi być włączone na nim SQL.Oznacza to, że partiach = ENABLED został użyty podczas utworzenia lub modyfikacji danego punktu końcowego.
Klasy serwera proxy w sieci Web sqlbatch() Metoda jest uwzględniana przy dodawaniu lub aktualizacji dla punktu końcowego włączone partia odwołań w sieci Web.
Wpisane parametrów XML sqlbatch() Metoda w klasie serwera proxy w sieci Web zostanie zaktualizowana tak, aby zawiera ustawienie żadnych dodatkowych właściwości)XmlSchemaCollectionDatabase, XmlSchemaCollectionName, XmlSchemaCollectionOwningSchema) związanych z rejestracją kolekcja schematu XML do System.Data.SqlClient.SqlParameter obiektu.
Uwaga
Obie metody w sieci Web i parametrów kwerendy, które narażają xml Typ danych, gdy System.Data.DataSet jest zwracany w danych wyjściowych (w ramach tablicę obiektów) i jego zawartość jest umieszczana w DataGrid wizualizacji wyniki w aplikacji klienckiej, DataSet nie jest używany (typ serwera proxy w sieci WebmyEndpoint:: xml) , ale środowisko CLR System.Data.SqlTypes.SqlXml wpisać zamiast niej.
Obsługa środowiska CLR typy zdefiniowane przez użytkownika z aplikacji klient sieci Web
Aby obsłużyć CLR typów zdefiniowanych przez użytkownika w aplikacji sieci Web klient, należy wykonać następujące czynności:
Zapis do środowiska CLR typ zdefiniowany przez użytkownika i skompiluj go w bibliotece DLL, takie jak MyType.dll.
W Visual Studio 2005, napisz CLR zdefiniowanej przez użytkownika typu (klasy lub struktury) i skompiluj go do wirtualny plik dziennika. Typ wirtualny plik dziennika muszą być zgodne z SQL Server wymagania dotyczące implementowania typów zdefiniowanych przez użytkownika. Umożliwia to wirtualny plik dziennika ma być zainstalowany i zarejestrowany na wystąpienie SQL Server. Aby uzyskać więcej informacji zobacz sekcję "Wymagania dla UDTs Implementowanie" w Środowisko CLR Typy definiowane przez użytkownika.
Aby wygenerować towarzyszący serializator XML biblioteki DLL, jeśli nie została zaimplementowana IXMLSerializable, uruchom sgen.exe w zestawie typu biblioteki DLL. To będzie miał nazwę, taką jak MyType.XmlSerializers.dll.
Oprócz zgodnych z wymaganiami podstawowego dla typ zdefiniowany przez użytkownika CLR do pracy z SQL Server, zdefiniowany przez użytkownika typ danych CLR musi być również XML można pracować z macierzystego usług XML sieci Web w SQL Server. Aby uzyskać więcej informacji zobacz "Serializacji XML" w Środowisko CLR Typy definiowane przez użytkownika.
Zainstaluj wirtualny plik dziennika typu biblioteki DLL w przypadku programu SQL Server za pomocą MONTAŻOWYCH CREATE.
Jeśli nie implementować IXMLSerializable i zakończonych kroku 2, należy także zainstalować serializator XML companion DLL w przypadku programu SQL Server za pomocą TWORZENIE wirtualny plik dziennika.
Środowisko CLR serializować typ zdefiniowany przez użytkownika w formacie XML i dołączyć go do myEndpoint**:: xml** struktury podobny do opisanego w poprzedniej sekcji.
After the CLR user-defined type is installed at the server, to pass an instance of that CLR user-defined type into SQL Server from a Native XML Web Services client application, you first must serialize the CLR user-defined type into XML format and include it into an XMLstructure.
W poniższym kodzie pokazano, jak serializować CLR typ zdefiniowany przez użytkownika do formatu XML można sformatować i umieszcza je w XML element (System.Xml.XmlElement).
// Create the user-defined type class on the client. SqlString s = new SqlString("0:0"); UdtClientApp.Point pnt = Point.Parse(s); // Invoke the method and pass in a user-defined type.You will need // to convert this to XmlElement before you can pass it to SQL Server. System.IO.MemoryStream writer = new System.IO.MemoryStream(); System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(UdtClientApp.Point)); serializer.Serialize(writer, pnt); writer.Seek(0, System.IO.SeekOrigin.Begin); System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(writer); System.Xml.XmlElement udtXml = xmlDoc.DocumentElement;
W zależności od tego, czy środowisko CLR zdefiniowanej przez użytkownika typu znajduje się na klient, mogą zawierać również do deserializacji parametru wyjściowego z jego formatu XML zdefiniowany przez użytkownika typ danych CLR do jego formatu typ zdefiniowany przez użytkownika.
W poniższym kodzie pokazano, jak deserializować typ zdefiniowany przez użytkownika XML z powrotem do zdefiniowany przez użytkownika typ danych CLR kodu po stronie klient.W tym przykładzie do środowiska CLR typ zdefiniowany przez użytkownika jest Point.
Object[] results = proxy.GetPointUdt(Convert.ToInt16(textBox1.Text), ref udtXml); //Deserialze the XML into user-defined type. TextReader reader = new StringReader(udtXml.OuterXml); // pnt was already defined as UdtClientApp.Point pnt = Point.Parse(s); pnt = (UdtClientApp.Point) serializer.Deserialize(reader);
Należy zauważyć, że nie trzeba wykonywać ten proces deserializacji, jeśli korzystasz z typ zdefiniowany przez użytkownika CLR jako XML bez typu na komputerze klienckim.
Środowisko CLR typów zdefiniowanych przez użytkownika można również przekazać jako parametry do kwerendy parametryczne w taki sam sposób, zgodnie z opisem w xml Typ danych. zdefiniowany przez użytkownika typ danych CLR w postaci XML szeregowane muszą być przekazywane przez klient za pomocą myEndpoint**::xml** type.
Za pomocą kwerendy parametryczne, mające związek z CLR typów zdefiniowanych przez użytkownika, są różne wartości zestaw na System.Data.SqlClient.SqlParameter Struktura. Na przykład następujące ustawienia właściwość są używane do środowiska CLR typów zdefiniowanych przez użytkownika:
The SqlDbType właściwość must be zestaw to a value of Udt.
The ClrTypeName właściwość must be zestaw to the SQL Server three-part qualified name (MyDatabase**.MySchema.**MyUdtType) of the installed typ zdefiniowany przez użytkownika as it is registered at the wystąpienie of SQL Server.