600 likes | 808 Views
INFOSYS290-3 Web Services: Concepts, Design and Implementation. Web Services Registries and UDDI. ablum@good.com. Agenda. UDDI V3 Spec Data structures Standard APIs Mapping WSDL to UDDI Tools .NET APIs for searching for services in UDDI Systinet for publishing services to UDDI
E N D
INFOSYS290-3 Web Services: Concepts, Design and Implementation Web Services Registriesand UDDI ablum@good.com
Agenda • UDDI V3 Spec • Data structures • Standard APIs • Mapping WSDL to UDDI • Tools • .NET APIs for searching for services in UDDI • Systinet for publishing services to UDDI • Extending UDDI for More Robust Information
Why Do We Need a Web Services Registry • Web services are valuable because of standardized payloads and transport definitions • The value is creating a web service that is used by many clients • Can’t happen unless the services are advertised to multiple consumers
What Does UDDI Contain? • Businesses and other service providers • Services they expose • Bindings (locations) of those services • Interfaces supported by those services
UDDI Entities • businessEntity – provider of service • businessService – collection of related services • bindingTemplate - information necessary to use • tModel - “reusable concept” such as • Interface • Protocol used by web services • Category • publisherAssertion - relationship that business entity has with another businessEntity • Subscription – request to be informed of particular changes
Core UDDI Entities businessEntity businessService Interface tModel bindingTemplate bindingTemplate Interface tModel businessService bindingTemplate
Design Principles • Keys as unique identifiers • Publisher assigned (new in V3) • Or generated by registry • Containment and references • Keys inside elements are either contained entities or references to other entities • Collections • Simple structure (e.g. name) just listed multiple times • Complex structure has container element (e.g. contacts on business) • Optional attributes • Empty not omitted • <keyedReference tModelKey=”uddi:uddi.org:ubr:categorization:iso3166” keyName=”” • keyValue=”US-CA”/>
businessEntity Identifying Elements • Uniquely identified by businessKey attribute • discoveryURLs • <discoveryURL useType=”businessEntity”>http://www.example.com?businessKey=uddi:example.com:registry:sales:53</discoveryURL> • Returns XML document of type businessEntity • <discoveryURL useType=”homepage”> http://www.acmewidgets.com</discoveryURL> • name • Multiple names to do languages or abbreviations • <businessEntity . . . > • ........ • <name xml:lang="ja">日本生花店</name> • <name xml:lang="ja">ニッポンセイカテン</name> • <name xml:lang="en">NIPPON FLOWERS </name> • <name xml:lang="en">NF</name> • ..... • </businessEntity> • description • Multiple descriptions potentially in multiple languages with xml:lang
businessEntity Identifiers and Categories • Optional IdentifierBag • <identifierBag> <keyedReference tModelKey=”uddi:uddi.org:ubr:identifier:dnb.com:d-u-n-s” keyName=”SAP AG” • keyValue=”31-626-8655” /> • </identifierBag> • Optional CategoryBag • <categoryBag> <keyedReference tModelKey=”uddi:uddi.org:ubr:categorization:iso3166” keyName=”California, USA” • keyValue=”US-CA” /> • </categoryBag>
UDDI Keyed References • tModelKey – • Required reference to tModel representing the identifier system (e.g. company identifier codes, geographical categories) • keyName • Optional description of the identifier • keyValue • Required identifier within the overall system
Keyed Reference Groups • <keyedReferenceGroup tModelKey=”uddi:uddi.org:ubr:categorizationGroup:wgs84” > <keyedReference tModelKey=”uddi:uddi.org:ubr:categorization:wgs84:latitude” keyName=”WGS 84 Latitude” • keyValue=”+49.682700” /> • <keyedReference tModelKey=”uddi:uddi.org:ubr:categorization:wgs84:longitude” keyName=”WGS 84 Longitude” • keyValue=”+008.295200” /> • </keyedReferenceGroup>
businessService • Uniquely identified by optional serviceKey attribute • Supplied by UDDI if not supplied by publisher • Optional descriptions • Optional categorizations in categoryBag • One or more bindingTemplates • Optional digital signature
bindingTemplate • Uniquely identified by optional bindingKey attribute • Optional serviceKey identifies service that contains this bindingTemplate • descriptions • accessPoint - network address (URL) • hostingRedirector – deprecated • categoryBag – e.g. can indicate that given template if status of “test” or production” • tModelInstanceDetails -
tModels • The “technical fingerprint” • tModel’s define unique identifiers for interfaces and interface specifications • Once tModel is published service advertises compliance with the spec represented by including the correct tModelKey • Value sets • Categorization hierarchies • E.g. categoryBag and identifierBag have references to tModels with the system of values • Find qualifiers • find_business uddi:uddi.org:findqualifier:sortbydateasc
tModel Structure • Exactly one non-empty name • Zero or more descriptions • Zero or more overviewDocs • useType=text • useType=wsdlInterface • identifierBag • Contains tModelKey which uniquely identifies tModel (inconsistent?) • Other logical identifiers • categoryBag • list of categories that describe specific aspects of the tModel
UDDI Keys • Domain keys • uddi:acmewidgets.com • UUID keys • uddi:4CD7E4BC-648B-426D-9936-443EAAC8AE23 • Derived keys • uddi:tempuri.com:fish:buyingservice • Key generator keys • Uddi:acmewidgets.com:keygenerator
UDDI APIs • Inquiry • Publication • Subscription • Security • Custody Transfer • Replication
Inquiry API Patterns • Browse • find_xx • Drill-down • Use browse then drill-down • get_xx • Invocation • Use browse and drilldown and get bindingTemplate • Invoke from bindingTemplate
Inquiry API Functions • find_binding • find_business • find_relatedBusinesses • find_service • find_tModel • get_bindingDetail • get_businessDetail • get_operationalInfo • get_serviceDetail • get_tModelDetail
Find_business example • <find_business xmlns="urn:uddi-org:api_v3"> <findQualifiers> <findQualifier> uddi:uddi.org:findqualifier:approximatematch </findQualifier> <findQualifier> uddi:uddi.org:findqualifier:combinecategorybags </findQualifier> </findQualifiers> <categoryBag> <keyedReference keyValue="34.10.%" tModelKey="uddi:uddi.org:ubr:categorization:unspsc"/> </categoryBag></find_business>
find_tModel Example <find_tModel xmlns="urn:uddi-org:api_v3"> <findQualifiers> <findQualifier> uddi:uddi.org:findqualifier:caseinsensitivematch </findQualifier> <findQualifier> uddi:uddi.org:findqualifier:approximatematch </findQualifier> </findQualifiers> <name>rosetta%</name></find_tModel>
Combined Searches <find_business xmlns="urn:uddi-org:api_v3"> <findQualifiers> <findQualifier> uddi:uddi.org:findqualifier:sortbynameasc </findQualifier> <findQualifier> uddi:uddi.org:sortorder:uts-10 </findQualifier> <findQualifier> uddi:uddi.org:findqualifier:orallkeys </findQualifier> </findQualifiers> <!--find businesses that have bindings that reference this fixed tModel --> <tModelBag> <tModelKey>uddi:some.specific.example:tmodelkey</tModelKey> </tModelBag> <!--OR one of the RosettaNet tModels --> <find_tModel xmlns="urn:uddi-org:api_v3"> <findQualifiers> <findQualifier> uddi:uddi.org:findqualifier:approximatematch </findQualifier> <findQualifier> uddi:uddi.org:findqualifier:caseinsensitivematch </findQualifier> <findQualifier> uddi:uddi.org:sortorder:uts-10 </findQualifier> </findQualifiers> <name>Rosetta%</name> </find_tModel></find_business>
Publication API • save_binding • save_business • save_service • save_tModel • Delete_xx • Xx_publisherAssertions
UDDI Registries • UBR • Microsoft • Uddi.microsoft.com • IBM • https://uddi.ibm.com/ubr/registry.html • SAP • NTT • Systinet • http://www.systinet.com/uddi/web
Connecting to UDDI with .NET public UddiConnection InitializeConnection() { string szInquiry = "http://test.uddi.microsoft.com/inquire"; string szPublish = "https://test.uddi.microsoft.com/publish"; string szExtension = "http://test.uddi.microsoft.com/extension.asmx"; string szUsername = null; string szPassword = null; UddiConnection oConnection = null; try { oConnect = new UddiConnection(szInquiry, szPublish, szExtension, szUsername, szPassword); System.Net.IWebProxy oProxy = System.Net.WebProxy("http://someproxy:80",true); oConnect.AutoGetAuthToken = true; oConnect.HttpClient.Proxy = oProxy; GetAuthToken oGetToken = new GetAuthToken(szUsername, szPassword); oConnect.AuthInfo = oGetToken.Send(oConnect); } catch(InvalidUrlPassedException oUddiEx) { // Insert exception-handling code. return null; } catch(UddiException oUddiEx) { // Insert exception-handling code. return null; } return oConnect; }
Finding Businesses with .NET using Microsoft.Uddi; try {// Create a connection to the UDDI node that is to be accessed.UddiConnection myConn = new UddiConnection("http://test.uddi.microsoft.com/inquire");// Create an object to find a business.FindBusiness fb = new FindBusiness("Fabrikam");// Send the prepared FindBusiness request over the connection.BusinessList bizList = fb.Send(myConn);// Report the summary result.Console.WriteLine("Found " + bizList.BusinessInfos.Count + " businesses");}catch (Microsoft.Uddi.UddiException e){ Console.WriteLine("UDDI error: " + e.Message); }catch (Exception gen){ Console.WriteLine("General exception: {0}", gen.Message); }
Publishing with .NET • UddiConnection myConn = new UddiConnection(InquireTextbox.Text,PublishTextBox.Text); • myConn.AuthenticationMode = AuthenticationMode.UddiAuthentication; • myConn.Username = UserTextbox.Text; • myConn.Password = PasswordTextbox.Text; • // Create a named business entity. • BusinessEntity myBiz = new BusinessEntity(BusinessNameTextbox.Text); • // Use business entity to create an object to save a business. • SaveBusiness sb = new SaveBusiness(myBiz); • // Send the prepared save business request. • BusinessDetail savedBiz = sb.Send(myConn); • ReturnBiz.Text= savedBiz.BusinessEntities[0].Names[0].Text; • ReturnKey.Text= savedBiz.BusinessEntities[0].BusinessKey;
Finding Services with .NET try { UddiConnection conn = new UddiConnection("http://localhost/uddi/inquire.asmx"); FindService fs = new FindService(“holdem odds”); ServiceList servList = fs.Send(conn); // Display the service name and unique identifying key. foreach (ServiceInfo servInfo in servList.ServiceInfos) { MessageBox.Show("Service: " + servInfo.Names[0].Text + " " + servInfo.ServiceKey); } } catch (Microsoft.Uddi.UddiException ex) { MessageBox.Show("UDDI Exception: " + ex.Message); } catch (Exception gen) { MessageBox.Show("General Exception: " + gen.Message); }
Finding Bindings and Connecting //servicekey= xxxx; Tmodelkey=xxxx; Microsoft.Uddi.Inquire.Url = “uddi.microsoft.com”; bindingSearcher = new Microsoft.Uddi.FindBinding(); //bindingSearcher.ServiceKey=servicekey; bindingSearcher.TModelKeys.Add(tmodelkey); Microsoft.Uddi.BindingDetail details = bindingSearcher.Send(); string[] urllist=new string[details.BindingTemplates.Count]; for(int x=0;x<details.BindingTemplates.Count;x++) { if(details.BindingTemplates[x].AccessPoint.URLType==Microsoft.Uddi.Api.URL Type.Http|| details.BindingTemplates[x].AccessPoint.URLType==Microsoft.Uddi.Api.URLType.Https) { localhost.pokerodds po = new localhost.pokerodds(); po.Url = accessPoint; percentage = po.AfterFlopDraw(14 } }
Mapping WSDL to UDDI • UDDI technote (V2.0 in August 2003) regarding • How to take about WSDL objects and store them in UDDI equivalents • Enables queries on WSDL constituents (portTypes, operations, ports)
portType->tModel • <tModel tModelKey="uuid:e8cf1163-8234-4b35-865f-94a7322e40c3" > • <name> • StockQuotePortType • </name> • <overviewDoc> • <overviewURL> • http://location/sample.wsdl • <overviewURL> • <overviewDoc> • <categoryBag> • <keyedReference • tModelKey="uuid:d01987d1-ab2e-3013-9be2-2a66eb99d824" • keyName="portType namespace" • keyValue="http://example.com/stockquote/" /> • <keyedReference • tModelKey="uuid:6e090afa-33e5-36eb-81b7- 1ca18373f457" • keyName="WSDL type" • keyValue="portType" /> • </categoryBag> • </tModel>
<tModel tModelKey="uuid:49662926-f4a5-4ba5-b8d0-32ab388dadda"> • <name>StockQuoteSoapBinding</name> • <overviewDoc> • <overviewURL> • http://location/sample.wsdl • </overviewURL> • </overviewDoc> • <categoryBag> • <keyedReference • tModelKey="uuid:d01987d1-ab2e-3013-9be2-2a66eb99d824" • keyName="binding namespace" • keyValue="http://example.com/stockquote/" /> • <keyedReference • tModelKey="uuid:6e090afa-33e5-36eb-81b7-1ca18373f457" • keyName="WSDL type" • keyValue="binding" /> • <keyedReference • tModelKey="uuid:082b0851-25d8-303c-b332-f24a6d53e38e" • keyName="portType reference" • keyValue="uuid:e8cf1163-8234-4b35-865f-94a7322e40c3" /> • <keyedReference • tModelKey="uuid:4dc74177-7806-34d9-aecd-33c57dc3a865" • keyName="SOAP protocol" • keyValue= "uuid:aa254698-93de-3870-8df3-a5c075d64a0e" /> • <keyedReference • tModelKey="uuid:e5c43936-86e4-37bf-8196-1d04b35c0099" • keyName="HTTP transport" • keyValue=" uuid:68DE9E80-AD09-469D-8A37-088422BFBC36" /> • <keyedReference • tModelKey="uuid:c1acf26d-9672-4404-9d70-39b756e62ab4" • keyName="uddi-org:types" • keyValue="wsdlSpec" /> • </categoryBag> • </tModel>