Aaron H. Kim Fearless Integration Maniac

타입없는(Untyped) BizTalk 웹서비스 사용하기

2008-08-07
Aaron Kim

오늘은 유용하게 사용할 수 있는 ‘타입없는 메시지’(Untyped Message)와 타입없는 메시지를
수신받는 타입없는 웹서비스(Untyped Webservice)를 만드는 방법에 대해 배워보도록 하겠습니다.

BizTalk에서 타입 있는 메시지(Typed Message)라 하면 특정 스키마(Schema)의 xml 인스턴스를
뜻하고, 타입 없는 메시지(Untyped Message)라 하면 특정 스키마(Schema)가 없는
System.Xml.XmlDocument 메시지를 뜻합니다.

타입없는 메시지는 하나의 오케스트레이션으로 여러 종류 타입의 메시지들을 수신받는데 유용하게
사용될 수 있는데 다음 특성때문에 가능합니다.

  1. XmlDocument 메시지는 다른 여러 타입들로 배정(Casting)이 가능합니다.
  2. 타입있는 메시지도 XmlDocument로 재배정(Casting)이 가능합니다.

이렇게 유용한 타입 없는 메시지(XmlDocument)를 수신 받는 웹 서비스를 만들게 되면
여러 인터페이스에서 하나의 진입점(Entry Point)을 가져가는 것이 가능해집니다.
일반적으로 BizTalk의 WebService Publishing Wizard를 통해서 웹서비스를 만들 때는
반드시 스키마를 지정하게 되어 있는데 그렇다면 어떻게 타입 없는 웹 서비스를 생성할까요?

다음과 같은 순서를 따라하시면 됩니다.

  1. WebService Publishing Wizard 실행

  1. 스키마 기반 웹서비스 생성하기 선택.

  1. 기본 Two-Way WebService1을 지워버리고, 새 웹서비스 및 One-Way 웹 메서드 추가.

   웹 서비스명 및 함수명 적절히 지어주고, Request에서 메시지 타입 선택. 이 때 아무 BizTalk 어셈블리의 아무 스키마를 선택하든 상관 없다. (웹서비스 생성된 후 Untyped로 바꿔줄 것이기 때문)

  1. 필요한 옵션들 설정 후 완료.

여기까지가 타입있는(Typed) 웹 서비스를 생성하는 방법이고, 이를 타입없는(Untyped) 웹 서비스로 변환하기 위한 단계는 다음과 같습니다.

생성된 BizTalk WebService Project를 열고 *.asmx.cs 파일을 수정해줍니다.

  1. 일단 웹 메서드 부분을 다음과 같이 수정해줍니다.

    public void WebMethod1(System.Xml.XmlDocument part)

  2. 다음 라인을 찾는다.

    Microsoft.BizTalk.WebService.ServerProxy.ParamInfo[] inParamInfos

  3. new 할당하는 부분을 다음 코드로 바꿔준다.

    new Microsoft.BizTalk.WebServices.ServerProxy.ParamInfo(typeof(System.Xml.XmlDocument), “part”)};

    여기서 끝나고 인터페이스 테스트를 해보면 다음과 같이 황당한 에러를 만나게 될 수 있습니다.

    이 때 해당 에러가 발생하는 일반적인 이유를 들어서 문제 해결을 하고자 하면 골치 아파집니다. 따라서 다음 단계도 꼭 챙겨줍니다.

  4. bodyTypeAssemblyQualifiedName 라인을 찾아서 다음과 같이 바꿔줍니다.

    string bodyTypeAssemblyQualifiedName = null;


Similar Posts

Comments