문제

제가 질문한 것이 맞는지 잘 모르겠지만, 제가 실행하려는 시나리오는 다음과 같습니다.

여러 파일(XML 및 몇 가지 관련 파일, "첨부 파일")은 단일 메시지로 BizTalk에 들어가야 합니다.기존 어댑터를 조사해 보았지만 기존 어댑터로는 해당 작업이 수행되지 않았습니다.더 정확하게 말하면 파일은 파일 시스템에서 가져옵니다.파일은 동시에 발견되지 않고, 순서가 보장되지 않을 때 한 번에 하나씩 도착합니다.XML(컨텐츠) 파일은 어떤 첨부 파일이 있어야 하는지(다른 파일은 무엇인지) 아는 파일입니다.

우리는 BizTalk 2009를 조사하고 있으며 사용자 지정 어댑터나 다른 책임이 있는지 궁금합니다.그리고 샘플을 찾을 수 있었나요?

감사해요.

도움이 되었습니까?

해결책

사용자 정의 어댑터를 사용하여 원하는 작업을 수행하는 것이 가능할 수도 있지만 권장하지는 않습니다.오케스트레이션을 사용하면 필요한 것을 얻을 수 있습니다.

당신이 찾고 있는 것은 호송대와 비슷하거나 최소한 상관관계를 사용하는 것과 같습니다.

BizTalk에서 호송은 메시지 그룹을 단일 오케스트레이션으로 처리할 수 있는 메시징 패턴(BizTalk 기능과 반대)입니다.

기본적으로 수신 포트에서 상관 관계를 사용하여 메시지를 병렬(원하는 방식) 또는 순차적 방식으로 그룹화합니다.

[여기](http://msdn.microsoft.com/en-us/library/ms942189(BTS.10).aspx) 스티븐 W.호송대에 대한 Thomas(BT 2004용이지만 개념은 여전히 ​​유지됨) 웹과 책에 많은 추가 정보가 있습니다(Professional BizTalk Server 2006에는 이에 대한 하위 섹션이 있습니다).

시나리오에 대한 자세한 내용이 없으면 호송대가 어떻게 구축될지 정확히 알기 어렵지만 아래에는 살펴봐야 할 두 가지 접근 방식이 있습니다. (또한 BT2009를 제대로 사용할 기회가 없었으므로 다음과 같은 상관 관계 시나리오에 대한 확장 지원이 있을 수 있습니다. 당신을 도와 드릴게요).

유연한 상관관계

컨텍스트 XML에 나열된 파일에 대해 아무것도 모른다면 Charles Young이 설명한 것과 같은 패턴이 필요할 것입니다. 이것 우편.

비균일 순차 호송

사전에 약간의 정보가 있는 경우 한 가지 방법은 다음과 같을 수 있습니다(기본적으로 비균일 순차 호송).

이는 모든 파일을 함께 연결하여 상호 연관시킬 수 있는 방법이 있다고 가정합니다.

인바운드 수신 포트(파일 수신 위치 포함)를 구독하는 단일 오케스트레이션을 만듭니다.

이 오케스트레이션에는 콘텐츠 파일에 대해 설정된 단일 활성화 수신 형태가 있습니다.

콘텐츠 파일에 의해 오케스트레이션이 시작되면 상호 연관된 두 번째 수신 형태가 해당 콘텐츠 파일과 일치하는 메시지를 선택하기 시작합니다.(이 두 번째 수신은 다양한 수의 파일을 허용하기 위해 루프에 포함될 수 있습니다)

그런 다음 디자인의 단일 아웃바운드 파일로 모두 함께 압축하고 전체 파일 수를 수신한 후 전송합니다.

다른 팁

더 나은 접근 방식은 사용자 정의 파이프 라인 구성 요소 및/또는 사용자 정의 어댑터의 조합으로 위의 요구 사항을 구현하는 것입니다. 컨텐츠 XML 파일을 제외하고는 들어오는 파일을 실제로 조작 할 필요가 없거나 이진 형식이기 때문에 할 수 없었습니다. 사용자 정의 파이프 라인 구성 요소가 필요합니다.

당신이 할 수있는 것은 파일 시스템과 상호 작용하고 청취 및 루핑 로직을 구현하기위한 사용자 정의 biztalk 어댑터를 개발하는 것입니다. 다음으로 바이너리 데이터 용 Base64 데이터 유형을 사용하여 단일 Biztalk 메시지를 만들기 위해 사용자 정의 파이프 라인 구성 요소를 개발할 수 있습니다. 또한이 구성 요소에서 오케스트레이션 구독을 활성화하기 위해 바로 메시지를 홍보 할 수도 있습니다.

오케스트레이션은 메시지가 이미 XML 형식 인 비즈니스 작업 흐름 시나리오를 구현하는 데 더 적합합니다. 이것은 사실이 아닌 것 같습니다. 어쨌든 나는 최소한 사용자 정의 파이프 라인 구성 요소가 필요하다고 생각합니다.

다윗의 대답이 정답입니다.

예상되는 첨부 파일의 내용에 대해 전혀 모르는 경우에도 해당 첨부 파일의 이름과 위치는 확실히 알고 있습니다.따라서 다음을 사용할 수 있습니다. 유연한 상관관계 David의 답변에 다음과 같이 연결되어 있습니다.

이 솔루션의 핵심은 내장된 BTS.ReceivedFileName 속성을 상호 연관시키는 것입니다.

먼저, 수신된 메시지의 BTS.ReceivedFileName 컨텍스트 속성을 승격하는 사용자 지정 파이프라인 구성 요소를 사용하여 사용자 지정 수신 파이프라인을 만듭니다.이 간단한 사용자 정의 구성 요소는 작성하기 매우 쉽지만 다음과 같은 타사 프레임워크를 사용하여 간단하게 만들 수 있습니다.뻔뻔한 플러그, 여기) 나의 파이프라인구성요소베이스 클래스 또는 우수한 BizTalk Server 파이프라인 구성 요소 마법사.

이제 쉬운 부분을 살펴보겠습니다.

  • 첨부 파일은 파일 시스템의 경로로 지정된 특정 위치에서 수신됩니다.
  • 수신하는 수신 위치 만들기 대체 위치, BizTalk에서 파일을 실제로 삼키는 시기를 제어하는 ​​데에만 사용됩니다.
  • 오케스트레이션에서 BTS.ReceivedFileName 속성을 사용하여 상관 유형을 만들고 이 상관 유형을 기반으로 상관 세트를 만듭니다.
  • 바이너리 첨부 파일을 받으려면 BTS.ReceivedFileName 컨텍스트 속성을 바이너리 첨부 파일의 파일 이름으로 설정하고 경로가 일치하는 더미 메시지를 보내세요. 대체 위치 ;수신 위치에서 사용되는 것.전송 형태에 대한 상관관계를 초기화합니다.
  • 표현식 셰이프를 사용하여 이진 파일을 원래 위치에서 수신 위치에 사용되는 위치로 복사합니다.
  • 마지막으로 사용자 지정 수신 파이프라인이 BTS.ReceivedFileName 속성을 승격할 수신 위치가 포함된 수신 포트에 바인딩된 수신 셰이프를 사용합니다.

상관관계를 초기화하려면 실제로 메시지를 보내야 한다는 점에 유의하세요.실제로 어떤 메시지를 보내는지는 중요하지 않습니다.내가 할 일은 다음을 포함하는 전송 파이프라인을 통해 메시지를 보내는 것입니다. 비어 있는 파이프라인 구성요소.이는 메시지를 읽지만 null을 반환하는 파이프라인 구성 요소입니다(그래서 메시지는 어댑터에 도달하기 전에 허공으로 사라집니다).보다 정교한 해결책은 다음을 사용하는 것입니다. 없는 어댑터.이는 메시지를 읽지만 이에 대해 아무 작업도 수행하지 않는 어댑터입니다.

이 두 가지 솔루션은 상관 관계를 초기화하기 위해 어딘가의 임시 위치에 많은 파일이 축적되는 것을 방지합니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top