SQL Server 2005 - Native XML Web Services MS SQL Server 2005 SQL Server 2005 - Native XML Web Services
Sposób dostępu do bazy danych Przed MS SQL Server 2005 – Tabular Data Stream (TDS) MS SQL Server 2005 – SOAP via HTTP Język T-SQL z wykorzystaniem parametrów Procedury składowane, rozszerzone procedury, funkcje użytkownika
MS SQL Server 2005 – SOAP via HTTP Otwarty protokół Szerokie możliwości podłączenia zróżnicowanych klientów – wyeliminowanie konieczności posiadania przez klienta komponentów MDAC Wykorzystanie technologii XML i HTML SQL Server dostępny dla każdego środowiska, które potrafi przetwarzać język XML oraz wysłać żądania HTTP Wyeliminowanie konieczności wykorzystywania driver’ów ODBC/JDBC przy łączeniu się z bazą danych
Jak stworzyć Native XML Web Service? Zdefiniować funkcje lub procedury składowane, które chcemy udostępnić Utworzyć ENDPOINT, który udostępni zdefiniowane funkcje lub procedury (tzw. Web services) Aplikacje, które potrafią wysłać i odbierać komunikaty SOAP mogą się łączyć z ENDPOINTEM i wysłać lub pobierać dane Wszystkie udostępnione obiekty (Web services) opisane są za pomocą języka WSDL (web services description language)
Konfiguracja serwera SQL jako Web Service (1) Zdefiniowanie procedury składowanej w języku T-SQL USE AdventureWorks GO CREATE FUNCTION dbo.GetCustomerName(@CustomerId INT) RETURNS nvarChar(MaX) AS BEGIN RETURN (SELECT Name FROM Sales.Store where CustomerID=@CustomerId) END
Konfiguracja serwera SQL jako Web Service (2) Definiowanie ENDPOINT’a CREATE ENDPOINT GetCustomerName STATE = STARTED AS HTTP ( PATH = '/Customer', AUTHENTICATION = (INTEGRATED), PORTS = (CLEAR), SITE = 'localhost' ) FOR SOAP WEBMETHOD 'CustomerName' (NAME='AdventureWorks.dbo.GetCustomerName'), BATCHES = DISABLED, WSDL = DEFAULT, DATABASE = 'AdventureWorks', NAMESPACE = 'http://AdventureWorks/Customer'
CREATE ENDPOINT– opis parametrów STATE - poczatkowy stan endpoint’u (started,stopped,disabled) AS HTTP – uzywany protokol transportowy (np. AS TCP) PATH – URL na serwerze, który klienci będą uzywali do polaczenia się z Web servisem AUTHENTICATION – sposób autoryzacji (BASIC, DIGETS, NTLM, KERBEROS, INTEGRATED) PORTS – typ portu na którym serwis nasluchuje (CLEAR lub SSL) SITE – nazwa hosta dla komputera, który będzie odpowiadal na zadania FOR SOAP – informacja ze endpoint będzie uzywal protokolu SOAP WEBMETHOD – definuje Webmetode, mapuje nazwe procedury skladowanej na Webmetode BATCHES – okresla czy endpoint będzie przetwarzal zapytania SQL-owe WSDL - czy endpoint będzie wpieral WSDL DATABASE - nazwa wykorzystywanej bazy danych NAMESPACE - przstrzen nazw dla jezyka XML
WSDL Jezyk XML Opis Web services Jeśli dla ENDPOINT’a parametr WSDL = DEFAULT wysyłając odpowiednie żądnie HTTP możemy uzyskać plik WSDL opisujący udostępnione Web services Rozbudowane środowiska (VS .NET, JBulider) wykorzystują WSDL do tworzenia klas proxy upraszczając wykorzystywanie Web services w aplikacjach http://localhost/Customer?wsdl
WSDL – opis procedury składowanej wraz z parametrami - <xsd:element name="CustomerName"> - <xsd:complexType> - <xsd:sequence> <xsd:element minOccurs="1" maxOccurs="1" name="CustomerId" type="sqltypes:int" nillable="true" /> </xsd:sequence> </xsd:complexType> </xsd:element> - <xsd:element name="CustomerNameResponse"> <xsd:element minOccurs="1" maxOccurs="1" name="CustomerNameResult" type="sqltypes:int" nillable="true" />
Visual Studio 2005 – wykorzystanie Native XML Web services Pobranie web referencji do udostępnionego serwisu (plik WSDL) Utworzenie klasy proxy Web service Klasa proxy udostępnia te wszystkie metody, które zdefiniowane zostały dla ENDPOINT’u Jeśli ENDPOINT zezwala na wykonywanie zapytań ad hoc udostępniona jest również metoda sqlbatch Klient wysyła do SQL Server 2005 komunikat SOAP SQL Server zwraca wynik żądanej metody do klienta
Visual Studio 2005 - przetwarzanie odpowiedzi Rezultaty operacji mogą być zwracane jako tablica obiektów Kod powrotu procedury (return code) zwracany jest w tablicy jako obiekt typu int XMLElement( System.Xml.XmlElement) Wynik zapytania SELECT... FOR XML DataSet (System.Data.DataSet) Wynik zapytania SELECT… SqlMessage (a custom type defined by the WSDL) Komunikaty błędów, uwagi, dodatkowe informacje SqlRowCount (a custom type defined by the WSDL) Ilość wierszy wynikowych SqlParameter ( a custom type defined by the WSDL) Zawiera zbiór parametrów zwróconych przez SQL Server 2005
SOAP via RPC Żądanie SOAP udostępnionego Web service Odpowiedź MS SQL 2005 <SOAP-ENV:Envelope xmlns:SOAP- ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP- ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:CustomerName xmlns:m="http://AdventureWorks/Customer"> <m:CustomerId>0</m:CustomerId> </m:CustomerName> </SOAP-ENV:Body> </SOAP-ENV:Envelope> <SOAP-ENV:Envelope><SOAP-ENV:Body> <method:CustomerNameResponse> <method:CustomerNameResult>A Bike Store</method:CustomerNameResult> </method:CustomerNameResponse> </SOAP-ENV:Body></SOAP-ENV:Envelope>
Visual Studio 2005 – Web services w oparciu o klasy proxy tworzone na podstawie plików WSDL Dodanie Web referenece Utworzenie i wykorzystanie klasy proxy do wywoływania Web service SQLHTTP.Customer ws = new SQLHTTP.Customer(); //create proxy class ws.Credentials = System.Net.CredentialCache.DefaultCredentials; MessageBox.Show(„Customer Name: „ + ws.customerName(1).toString());
Batches: AdHoc Queries BATCHES=ENABLED ENDPOINT udostępnia metodę sqlbatch Sqlbatch pozwala na wykonywanie procedur T-SQL poprzez komunikaty SOAP Sqlbatch – parametry: <BatchCommands> - procedura T-SQL <Parameters> (opcjonalnie) – tablica parametrów, jeśli procedura ich wymaga
SOAP via RPC - sqlbatch (1) Wywołanie metody sqlbatch wraz z parametrami <m:sqlbatch xmlns:m="http://schemas.microsoft.com/sqlserver/2004/SOAP"> <m:BatchCommands> SELECT LoginID,Title FROM HumanResources.Employee WHERE EmployeeID=@x FOR XML AUTO; </m:BatchCommands> <m:Parameters> <m0:SqlParameter name="x" sqlDbType="Int" direction="Input" maxLength="1" precision="18" scale="0" clrTypeName="" sqlCompareOptions="Default" localeId="-1" sqlCollationVersion="0" sqlSortId="0" xmlSchemaCollection=""> <m0:Value>1</m0:Value> </m0:SqlParameter> </m:Parameters> </m:sqlbatch>
SOAP via RPC - sqlbatch (2) Odpowiedź SQL Server 2005 <sqlresultstream:SqlXml xsi:type="sqlsoaptypes:SqlXml"> <SqlXml><HumanResources.Employee LoginID="adventure-works\guy1" Title="Production Technician - WC60"/></SqlXml> </sqlresultstream:SqlXml>
Visual Studio 2005 – metoda sqlbatch SQLHTTP.Customer ws = new SQLHTTP.Customer; ws.Credentials = System.Net.CredentialCache.DefaultCredentials; WApp.localhost.SqlParameter[] p = new WApp.localhost.SqlParameter[1]; p[0] = new WApp.localhost.SqlParameter(); p[0].name = "x"; p[0].Value = "1"; p[0].maxLength = 20; p[0].sqlDbType = WApp.localhost.sqlDbTypeEnum.Int; p[0].direction = NativeSOAPApp1.server.ParameterDirection.Input; string s = "SELECT LoginID, Title " + "FROM HumanResources.Employee Where EmployeeID=@x " + "FOR XML AUTO;"; object[] results = ws.sqlbatch(s, ref p);// proxy.sqlbatch(s); string wynik = ""; for (int j = 0; j < results.Length; j++) { object e1; System.Xml.XmlElement xmlResult; e1 = results[j]; switch (e1.ToString()) { case "System.Xml.XmlElement": xmlResult = (System.Xml.XmlElement)results[j]; wynik = wynik + xmlResult.OuterXml+"\n"; break; } MessageBox.Show(wynik);
SQL Server 2005 - Native XML Web Services MS SQL Server 2005 SQL Server 2005 - Native XML Web Services