180 likes | 503 Views
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.
E N D
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) 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' ) Definiowanie ENDPOINT’a
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:complexType> - <xsd:sequence> <xsd:element minOccurs="1" maxOccurs="1" name="CustomerNameResult" type="sqltypes:int" nillable="true" /> </xsd:sequence> </xsd:complexType> </xsd:element>
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
SOAP via RPC <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> • Żądanie SOAP udostępnionego Web service • Odpowiedź MS SQL 2005 <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);
MS SQL Server 2005 SQL Server 2005 - Native XML Web Services