다음을 통해 공유


UDDI: XML 웹 서비스

 

크리스 러벳
Microsoft Corporation

2000년 12월 18일

콘텐츠

어떤 XML을 게시합니까? XML을 게시하려면 어떻게 해야 합니까? 당신은 무엇을 다시 얻을 수 있습니까? 얼마나 잘 작동하나요? 결론

UDDI 드릴다운 예제(인터넷 Explorer 5.x 필요)

UDDI(유니버설 설명, 검색 및 통합) 서비스는 이제 Microsoft, IBM 및 Ariba에서 실행되고 있습니다. 이는 애플리케이션에서 다른 온라인 서비스 동적으로 검색하는 데 사용할 수 있는 온라인 웹 서비스로, 모두 간단한 XML 인터페이스에 깔끔하게 패키지되어 있습니다.

익스트림 XML 판독기에서 클라이언트 애플리케이션과 중간 계층 서버 간에 XML을 전달하는 것은 새로운 것이 아닙니다. 우리는 1998년부터 이 일을 해왔습니다. 그러나 이와 같은 유용한 서비스를 초래하는 이러한 방향으로 지속적인 업계 모멘텀을 보는 것은 좋은 일입니다.

그래서 난 그냥 nitty-gritty에 바로 다이빙하자. XML을 게시할 URL만 있으면 됩니다. 다음 세 개의 URL을 찾기 위해 약간의 파고가 걸렸습니다.

다음은 "INQUIRIES"의 UDDI 진입점입니다. 업데이트의 진입점은 서로 다르며 일반적으로 보안상의 이유로 HTTPS 주소입니다.

어떤 XML을 게시합니까?

우선 XML은 UTF-8(UDDI 프로젝트에서 의도적인 단순화)이어야 하며 SOAP 봉투에 래핑되어야 합니다. SOAP 봉투는 다음과 같습니다.

<?xml version='1.0' encoding='UTF-8'?>
<Envelope xmlns='https://schemas.xmlsoap.org/soap/envelope/'>
<Body>...</Body>
</Envelope>

Body> 요소의 <내용은 uddi 스키마의 모든 쿼리일 수 있습니다. 예를 들어 SOAP 봉투의 본문> 내에 <배치된 다음 쿼리는 Microsoft의 세부 정보를 반환합니다.

<find_business generic="1.0" xmlns="urn:uddi-org:api">
    <name>Microsoft</name>
</find_business>

SOAP 네임스페이스에서 "urn:uddi-org:api" 네임스페이스로 네임스페이스를 전환합니다. find_business 쿼리에서 수행할 수 있는 다른 많은 작업도 있습니다.

XML을 게시하려면 어떻게 해야 합니까?

JScript 파일 또는 HTML 페이지에서 다음과 같이 MSXML에서 제공하는 XMLHTTP 컨트롤을 사용할 수 있습니다.

   http = new ActiveXObject("Microsoft.XMLHTTP");
   http.open("POST", url, false);
   http.setRequestHeader("Accept","text/xml");
   http.setRequestHeader("Cache-Control","no-cache");
   http.setRequestHeader("SOAPAction",'""');
   http.send(msg);

이 경우 HTTP 헤더에서 SoapAction을 설정하여 좋은 SOAP 시민이 되기로 결정했습니다. 또한 매번 라이브 결과를 원하기 때문에 text/xml 결과만 수락하고 모든 캐싱을 해제하기로 결정했습니다. 물론 연결된 샘플 코드에서는 onreadystatechange 콜백을 사용하여 비동기적으로 이 작업을 수행합니다.

당신은 무엇을 다시 얻을 수 있습니까?

물론 XML입니다. 이 경우 UDDI 서비스 자체에 대한 정보를 포함하여 현재 Microsoft에 등록된 businessInfo> 요소의 <자세한 목록을 가져옵니다.

<businessList generic="1.0" operator="Microsoft Corporation"
    truncated="false" xmlns="urn:uddi-org:api">
  <businessInfos>
    <businessInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3">
      <name>Microsoft Corporation</name>
    <description xml:lang="en">Empowering people through great software -
    any time, any place and on any device is Microsofts vision. As the worldwide
    leader in software for personal and business computing, we strive to produce
    innovative products and services that meet our customer's </description>
    <serviceInfos>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                        serviceKey="1FFE1F71-2AF3-45FB-B788-09AF7FF151A4">
          <name>Web services for smart searching</name>
        </serviceInfo>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                     serviceKey="8BF2F51F-8ED4-43FE-B665-38D8205D1333">
          <name>Electronic Business Integration Services</name>
        </serviceInfo>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                     serviceKey="611C5867-384E-4FFD-B49C-28F93A7B4F9B">
          <name>Volume Licensing Select Program</name>
        </serviceInfo>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                     serviceKey="5DE3CE59-923E-42D3-B7FB-34FC3C3CBC16">
          <name>Technet</name>
        </serviceInfo>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                     serviceKey="24E553C3-7E3E-484A-8ECA-80E0D0B4A91F">
          <name>Microsoft Developer Network</name>
        </serviceInfo>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                     serviceKey="77DD86E5-CD70-4219-A28C-37231EAF3901">
          <name>Online Shopping</name>
        </serviceInfo>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                     serviceKey="0860E130-D4AF-4BD5-9F5C-D7F6FA4B1AD8">
          <name>Home Page</name>
        </serviceInfo>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                     serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
          <name>UDDI Web Services</name>
        </serviceInfo>
        <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                     serviceKey="A8E4999A-21A3-47FA-802E-EE50A88B266F">
          <name>UDDI Web Sites</name>
        </serviceInfo>
      </serviceInfos>
    </businessInfo>
  </businessInfos>
</businessList>

여기에서 특정 서비스에 대한 정보를 드릴 인하고 가져올 수 있습니다. 예를 들어 UDDI 웹 서비스에서 드릴인해 보겠습니다. 위의 결과에서 businessKey를 사용하고 find_service> 사용하여 <이름으로 서비스를 조회할 수 있습니다.

<find_service generic='1.0' xmlns='urn:uddi-org:api'
    businessKey='0076B468-EB27-42E5-AC09-9955CFF462A3'>
    <name>UDDI Web Services</name>
</find_service>

그러면 이 서비스에 대한 정보가 반환됩니다.

<serviceList generic="1.0" operator="Microsoft Corporation"
        truncated="false" xmlns="urn:uddi-org:api">
  <serviceInfos>
    <serviceInfo businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                    serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
      <name>UDDI Web Services</name>
    </serviceInfo>
  </serviceInfos>
</serviceList>

그런 다음 serviceKey 를 사용하여 이 특정 서비스에 대한 세부 정보를 가져올 수 있습니다.

<get_serviceDetail generic='1.0' xmlns='urn:uddi-org:api'>
    <serviceKey>D2BC296A-723B-4C45-9ED4-494F9E53F1D1</serviceKey>
</get_serviceDetail>

이렇게 하면 다음 <bindingTemplates가 반환됩니다>.

<serviceDetail generic="1.0" operator="Microsoft Corporation"
    truncated="false" xmlns="urn:uddi-org:api">
  <businessService businessKey="0076B468-EB27-42E5-AC09-9955CFF462A3"
                   serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
    <name>UDDI Web Services</name>
  <description xml:lang="en">UDDI SOAP/XML message-based programmatic web
  service interfaces.</description>
  <bindingTemplates>
    <bindingTemplate bindingKey="313C2BF0-021D-405C-8149-25FD969F7F0B"
                     serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
      <description xml:lang="en">Production UDDI server,
      Publishing interface</description>
    <accessPoint URLType="https">https://uddi.microsoft.com/publish</accessPoint>
    <tModelInstanceDetails>
      <tModelInstanceInfo tModelKey="uuid:64C756D1-3374-4E00-AE83-EE12E38FAE63">
        <description xml:lang="en">UDDI SOAP Publication Interface</description>
      </tModelInstanceInfo>
      </tModelInstanceDetails>
    </bindingTemplate>
    <bindingTemplate bindingKey="A9CAFBE4-11C6-4BFE-90F5-595970D3DE24"
        serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
      <description xml:lang="en">Production UDDI server, Inquiry interface</description>
      <accessPoint URLType="http">http://uddi.microsoft.com/inquire</accessPoint>
      <tModelInstanceDetails>
        <tModelInstanceInfo tModelKey="uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23">
          <description xml:lang="en">UDDI SOAP Inquiry Interface</description>
        </tModelInstanceInfo>
        </tModelInstanceDetails>
      </bindingTemplate>
    <bindingTemplate bindingKey="3FE6C834-293E-4341-AF6E-41DC68949764"
                     serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
      <description xml:lang="en">Test UDDI server, Publishing interface</description>
      <accessPoint URLType="https">https://test.uddi.microsoft.com/publish</accessPoint>
      <tModelInstanceDetails>
        <tModelInstanceInfo tModelKey="uuid:64C756D1-3374-4E00-AE83-EE12E38FAE63">
          <description xml:lang="en">UDDI SOAP Publication Interface</description>
        </tModelInstanceInfo>
        <tModelInstanceInfo tModelKey="uuid:F372E009-F372-429C-A09A-794113A5C5F9">
          <description xml:lang="en">urn:microsoft-com:test-signature-element -
          signifies that this is a testing version of the service</description>
          </tModelInstanceInfo>
        </tModelInstanceDetails>
      </bindingTemplate>
    <bindingTemplate bindingKey="8ED4AD10-C63B-495E-8969-B3938F86E937"
                     serviceKey="D2BC296A-723B-4C45-9ED4-494F9E53F1D1">
      <description xml:lang="en">Test UDDI server, Inquiry interface</description>
      <accessPoint URLType="http">http://test.uddi.microsoft.com/inquire</accessPoint>
      <tModelInstanceDetails>
        <tModelInstanceInfo tModelKey="uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23">
          <description xml:lang="en">UDDI SOAP Inquiry Interface</description>
        </tModelInstanceInfo>
        <tModelInstanceInfo tModelKey="uuid:F372E009-F372-429C-A09A-794113A5C5F9">
          <description xml:lang="en">urn:microsoft-com:test-signature-element -
          signifies that this is a testing version of the service</description>
          </tModelInstanceInfo>
        </tModelInstanceDetails>
      </bindingTemplate>
    </bindingTemplates>
  <categoryBag>
    <keyedReference keyName="KEYWORD" keyValue="API"
        tModelKey="uuid:A035A07C-F362-44DD-8F95-E2B134BF43B4"></keyedReference>
    <keyedReference keyName="KEYWORD" keyValue="SOAP"
        tModelKey="uuid:A035A07C-F362-44DD-8F95-E2B134BF43B4"></keyedReference>
    <keyedReference keyName="KEYWORD" keyValue="XML"
        tModelKey="uuid:A035A07C-F362-44DD-8F95-E2B134BF43B4"></keyedReference>
    </categoryBag>
  </businessService>
</serviceDetail>

이제 온라인 웹 서비스 자체에 대한 매우 풍부한 정보를 얻기 시작했음을 알 수 있습니다. 이렇게 하면 실제로 에 4개의 액세스 지점, 2개의 테스트 액세스 지점 http://test.uddi.microsoft.com 및 2개의 프로덕션 액세스 지점이 있음을 알 수 있습니다 http://uddi.microsoft.com. 또한 UDDI 조회 액세스 지점은 HTTP를 통해 공개적으로 주소를 지정하고 게시 액세스 지점은 HTTPS 보호 하에 있음을 알려줍니다.

tModelKey 정보를 사용하여 다음과 같이 UDDI Web Serice를 제공하는 등록된 모든 비즈니스를 찾을 수도 있습니다.

<find_business generic='1.0' xmlns='urn:uddi-org:api'>
   <tModelBag><tModelKey>uuid:4CD7E4BC-648B-426D-9936-443EAAC8AE23</tModelKey></tModelBag>
</find_business>

그러면 Microsoft 및 IBM용 <businessInfos> 가 반환됩니다. Ariba <tModelInstanceDetails> 는 아직 사용할 수 없는 것 같으므로 Ariba가 반환되지 않습니다.

얼마나 잘 작동하나요?

Microsoft와 Ariba 구현 간에 몇 가지 성가신 차이점이 있음을 발견했습니다. 예를 들어 Ariba 구현에서는 UTF-8이 대문자여야 하며 XML 선언에서 추가 공백을 처리할 수 없습니다.

이러한 서비스가 완전히 상호 운용 가능해지기 위해서는 이와 같은 단점을 다림질해야 합니다. 응답 시간이 꽤 좋지만 데이터가 약간 동기화되지 않은 것 같습니다. 시간이 지남에 따라 동기화가 더 좋아지길 바랍니다.

결론

외부 비즈니스 파트너가 제공하는 서비스에 동적으로 연결해야 하는 애플리케이션을 빌드하는 경우 UDDI 레지스트리에 애플리케이션을 연결하는 방법을 고려해야 합니다. 비즈니스 애플리케이션 계층에 대한 DNS인 것처럼 생각하세요. 흥미로운 점은 액세스 지점을 실시간으로 추가, 변경 및 제거하여 DNS 전파와 관련된 1주일 이상의 지연을 해결할 수 있다는 것입니다.

많은 사람들이 UDDI 디렉터리에서 회사 및 등록된 서비스를 찾은 후 무엇을 해야 할지 묻고 있습니다. 음, UDDI는 모든 것을 해결하기 위해 주장하지 않습니다. 지금까지 발명된 모든 것을 포괄하는 master 비즈니스 간 프로토콜을 사양화하려는 시도는 엄청난 사업이며 아마도 결코 일어나지 않을 것입니다. UDDI 이론은 애플리케이션이 잘 알려진 몇 가지 종류의 비즈니스 프로토콜로 비즈니스를 수행하는 방법을 알고 있으며, 이러한 프로토콜은 해당 프로토콜을 지원하는 다른 비즈니스를 동적으로 찾을 수 있도록 잘 알려진 방식으로 설명된다는 것입니다. 또는 UDDI를 사용하여 해당 파트너가 제공하는 새 서비스를 찾는 소수의 잘 알려진 신뢰할 수 있는 글로벌 비즈니스 파트너가 있을 수 있습니다. 이 경우 각 서비스에 연결하는 데 필요한 어댑터를 다운로드하기 위해 다른 신뢰할 수 있는 채널이 이미 설정되었을 수 있습니다.

결론: UDDI는 확실히 올바른 방향으로 큰 단계입니다.

Chris Lovett 는 Microsoft XML 팀의 프로그램 관리자입니다.