View
216
Download
0
Category
Preview:
Citation preview
Web Services Registriesand UDDI
ablum@good.com
INFOSYS290-3 Web Services: Concepts, Design and Implementation
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
businessService
businessService
Interface tModelbindingTemplate
bindingTemplate
businessEntity
bindingTemplateInterface tModel
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 Structure
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 contacts
<
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
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
bindingTemplates
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 -
tModelInstance Details
overviewDoc
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
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 Standard APIs
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_binding
find_business
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_service
find_tModel
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 Tools
UDDI Registries
• UBR– Microsoft
• Uddi.microsoft.com
– IBM• https://uddi.ibm.com/ubr/registry.html
– SAP– NTT
• Systinet– http://www.systinet.com/uddi/web
Searching for Web Services
Publishing a Web Service
Connecting to UDDI with .NETpublic 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 .NETusing 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 .NETtry {
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)
Overview
Wsdl:portType->uddi:tModel
WSDL UDDI
portType tModel (categorized as portType)
Namespace of portType keyedReference in categoryBag
Local name of portType tModel Name
Location of WSDL Document
overviewURL
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>
WSDL Binding to UDDI tModel
WSDL UDDI
binding tModel (categorized as binding and wsdlSpec)
Namespace of binding keyedReference in categoryBag
Local name of binding tModel Name
Location of WSDL Document
overviewURL
portType reference and protocol references
keyedReferences in category bag
• <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>
WSDL Service to UDDI Business Service
WSDL UDDI
Service businessService (categorized as service)
Namespace of Service keyedReference in categoryBag
Local Name of Service keyedReference in categoryBag; optionally also the name of the service
WSDL Port to UDDI bindingTemplate
WSDL UDDI
port bindingTemplate
Namespace Captured in keyedReference of the
containing businessService Local name of port instanceParms of the tModelInstanceInfo
relating to the tModel for the binding
Binding implemented by port
tModelInstanceInfo with tModelKey of the tModel corresponding to the binding
portType implemented by port
tModelInstanceInfo with tModelKey of the tModel corresponding to the portType
Business Service and Binding Templates• <businessService
• serviceKey="102b114a-52e0-4af4-a292-02700da543d4" • businessKey="1e65ea29-4e0f-4807-8098-d352d7b10368">• <name>Stock Quote Service</name>• <bindingTemplates>• <bindingTemplate • bindingKey="f793c521-0daf-434c-8700-0e32da232e74" • serviceKey="102b114a-52e0-4af4-a292-02700da543d4">• <accessPoint URLType="http">• http://location/sample• </accessPoint>• <tModelInstanceDetails>• <tModelInstanceInfo • tModelKey="uuid:49662926-f4a5-4ba5-b8d0-32ab388dadda">• <description xml:lang="en">• The wsdl:binding that this wsdl:port implements. The instanceParms
specifies the port local name.• </description>• <instanceDetails>• <instanceParms>StockQuotePort</instanceParms>• </instanceDetails>• </tModelInstanceInfo>• <tModelInstanceInfo • tModelKey="uuid:e8cf1163-8234-4b35-865f-94a7322e40c3">• <description xml:lang="en">• The wsdl:portType that this wsdl:port implements.• </description>• </tModelInstanceInfo>• </tModelInstanceDetails>• </bindingTemplate>• </bindingTemplates>•
… and category bags for same• <categoryBag>• <keyedReference • tModelKey="uuid:6e090afa-33e5-36eb-81b7-1ca18373f457"• keyName="WSDL type"• keyValue="service" />• <keyedReference • tModelKey="uuid:d01987d1-ab2e-3013-9be2-2a66eb99d824"• keyName="service namespace" • keyValue="http://example.com/stockquote/" />• <keyedReference • tModelKey="uuid:2ec65201-9109-3919-9bec-c9dbefcaccf6"• keyName="service local name"• keyValue="StockQuoteService" />• </categoryBag>• </businessService>
Extending the Registry
• Categorization of tModels can be used to provide– Versioning of interfaces– QoS information on bindingTemplates
Versioning of tModels<tModel tModelKey="uddi:mycompany.com:stockquoteporttype">
<name>StockQuotePortType</name> <overviewDoc> <overviewURL> http://location/sample.wsdl <overviewURL> <overviewDoc> <categoryBag> <keyedReference tModelKey="uddi:uddi.org:versioning:major-version" keyName="Major Version" keyValue="2"/> <keyedReference tModelKey="uddi:uddi.org:versioning:minor-version" keyName="Minor Version" keyValue="1"/> <keyedReference tModelKey="uddi:uddi.org:versioning:revision-number" keyName="Revision Number" keyValue="Build 1241"/> <keyedReference tModelKey="uddi:uddi.org:versioning:milestone" keyName="Milestone" keyValue="latest-revision"/> <keyedReference tModelKey="uddi:uddi.org:versioning:versioning-component" keyName="Versioning Component" keyValue="StockQuoteSampleComponent"/> <keyedReference tModelKey="uddi:uddi-org:xml:namespace" keyName="portType namespace" keyValue="http://example.com/stockquote/"/> <keyedReference tModelKey="uddi:uddi-org:wsdl:types" keyName="WSDL type" keyValue="portType"/> </categoryBag>
</tModel>
QoS Information on BindingTemplates
<businessService serviceKey="uddi:mycompany.com:StockQuoteService" businessKey="uddi:mycompany.com:business> <name>Stock Quote Service</name> <bindingTemplates> <bindingTemplate bindingKey="uddi:mycompany.com:StockQuoteService:primaryBinding" serviceKey="uddi:mycompany.com:StockQuoteService"> <accessPoint URLType="http">http://location/sample </accessPoint> <tModelInstanceDetails>
<tModelInstanceInfo tModelKey="uddi:mycompany.com:StockQuoteService:PrimaryBinding:QoSInformation">
<description xml:lang="en"> This is the reference to the tModel that will have all of the QOS related categories attached. </description> </tModelInstanceInfo> <tModelInstanceInfo
tModelKey="uddi:mycompany.com:StockQuoteService:Primary Binding:QoSDetail">
<description xml:lang="en"> This points to the tModel that has the reference to the web
service endpoint that allows detailed retrieval of information </description> </tModelInstanceInfo>
</tModelInstanceDetails> </bindingTemplate> </bindingTemplates>
</businessService>
The tModel with the QoS Information
• <tModel tModelKey="mycompany.com:StockQuoteService: PrimaryBinding:QoSInformation"" > – <name> QoS Information for Stock Quote Service
</name> <overviewDoc> • <overviewURL> http://<URL describing schema of QoS attributes> <overviewURL>
– <overviewDoc> • <categoryBag>
– <keyedReference tModelKey="uddi:uddi.org:QoS:ResponseTime" keyName="Average ResponseTime" keyValue="fast" /> <keyedReference tModelKey="uddi:uddi.org:QoS:Throughput" keyName="Average Throughput" keyValue=">10Mbps" /> <keyedReference tModelKey="uddi:uddi.org:QoS:Reliability" keyName="Average Reliability" keyValue="99.9%" />
• </categoryBag> • </tModel>
Specs
• “Using WSDL in a UDDI Registry, Version 2.0.2”– http://www.oasis-open.org/committees/uddi-
spec/doc/tn/uddi-spec-tc-tn-wsdl-v202-20040631.htm
Articles• .NET UDDI
– Web Services Journal, “Microsoft UDDI SDK 2.0”, http://www.sys-con.com/webservices/article.cfm?id=544
– MSDN, “Using UDDI at Run Time, Part I”, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnuddi/html/runtimeuddi1.asp - uses UDDI to query for other services for redundancy
– MSDN, “Using UDDI and Run Time, Part II”, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnuddi/html/runtimeuddi2.asp - uses UDDI to register service and then to query for instances of services supporting given tModel
• Extending UDDI– UDDI as an Extended Web Services Registry: Versioning, quality of service, and
more”, Blum• Web Services Journal, June 2004, http://www.sys-con.com/story/?storyid
=45102&DE=1– “Extending UDDI with robust Web services information”, Blum
• http://searchwebservices.techtarget.com/originalContent/0,289142,sid26_gci952129,00.html
Recommended